diff options
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.releng.doc/src/org/eclipse/emf/cdo/releng/doc/article/impl/StructuralElementImpl.java')
-rw-r--r-- | plugins/org.eclipse.emf.cdo.releng.doc/src/org/eclipse/emf/cdo/releng/doc/article/impl/StructuralElementImpl.java | 1438 |
1 files changed, 719 insertions, 719 deletions
diff --git a/plugins/org.eclipse.emf.cdo.releng.doc/src/org/eclipse/emf/cdo/releng/doc/article/impl/StructuralElementImpl.java b/plugins/org.eclipse.emf.cdo.releng.doc/src/org/eclipse/emf/cdo/releng/doc/article/impl/StructuralElementImpl.java index d8c850f285..f5e2f12e72 100644 --- a/plugins/org.eclipse.emf.cdo.releng.doc/src/org/eclipse/emf/cdo/releng/doc/article/impl/StructuralElementImpl.java +++ b/plugins/org.eclipse.emf.cdo.releng.doc/src/org/eclipse/emf/cdo/releng/doc/article/impl/StructuralElementImpl.java @@ -1,719 +1,719 @@ -/*
- * <copyright>
- * </copyright>
- *
- * $Id$
- */
-package org.eclipse.emf.cdo.releng.doc.article.impl;
-
-import org.eclipse.emf.cdo.releng.doc.article.ArticlePackage;
-import org.eclipse.emf.cdo.releng.doc.article.Documentation;
-import org.eclipse.emf.cdo.releng.doc.article.StructuralElement;
-import org.eclipse.emf.cdo.releng.doc.article.impl.DocumentationImpl.TocWriter;
-import org.eclipse.emf.cdo.releng.doc.article.util.ArticleUtil;
-
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.common.notify.NotificationChain;
-import org.eclipse.emf.common.util.EList;
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.InternalEObject;
-import org.eclipse.emf.ecore.impl.ENotificationImpl;
-import org.eclipse.emf.ecore.util.EObjectContainmentWithInverseEList;
-import org.eclipse.emf.ecore.util.EcoreUtil;
-import org.eclipse.emf.ecore.util.InternalEList;
-
-import com.sun.javadoc.Doc;
-import com.sun.javadoc.Tag;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
-
-/**
- * <!-- begin-user-doc --> An implementation of the model object '<em><b>Structural Element</b></em>'. <!-- end-user-doc
- * -->
- * <p>
- * The following features are implemented:
- * <ul>
- * <li>{@link org.eclipse.emf.cdo.releng.doc.article.impl.StructuralElementImpl#getChildren <em>Children</em>}</li>
- * <li>{@link org.eclipse.emf.cdo.releng.doc.article.impl.StructuralElementImpl#getParent <em>Parent</em>}</li>
- * <li>{@link org.eclipse.emf.cdo.releng.doc.article.impl.StructuralElementImpl#getTitle <em>Title</em>}</li>
- * <li>{@link org.eclipse.emf.cdo.releng.doc.article.impl.StructuralElementImpl#getOutputFile <em>Output File</em>}</li>
- * <li>{@link org.eclipse.emf.cdo.releng.doc.article.impl.StructuralElementImpl#getDocumentation <em>Documentation</em>}
- * </li>
- * </ul>
- * </p>
- *
- * @generated
- */
-public abstract class StructuralElementImpl extends LinkTargetImpl implements StructuralElement
-{
- /**
- * The cached value of the '{@link #getChildren() <em>Children</em>}' containment reference list. <!-- begin-user-doc
- * --> <!-- end-user-doc -->
- *
- * @see #getChildren()
- * @generated
- * @ordered
- */
- protected EList<StructuralElement> children;
-
- /**
- * The default value of the '{@link #getTitle() <em>Title</em>}' attribute. <!-- begin-user-doc --> <!-- end-user-doc
- * -->
- *
- * @see #getTitle()
- * @generated
- * @ordered
- */
- protected static final String TITLE_EDEFAULT = null;
-
- /**
- * The cached value of the '{@link #getTitle() <em>Title</em>}' attribute. <!-- begin-user-doc --> <!-- end-user-doc
- * -->
- *
- * @see #getTitle()
- * @generated
- * @ordered
- */
- protected String title = TITLE_EDEFAULT;
-
- /**
- * The default value of the '{@link #getDoc() <em>Doc</em>}' attribute. <!-- begin-user-doc --> <!-- end-user-doc -->
- *
- * @see #getDoc()
- * @generated
- * @ordered
- */
- protected static final Doc DOC_EDEFAULT = null;
-
- private String fullPath;
-
- private File outputFile;
-
- private Doc doc;
-
- private boolean overview;
-
- private float number = 100f;
-
- private List<StructuralElement> sortedChildren;
-
- private String path;
-
- /**
- * <!-- begin-user-doc --> <!-- end-user-doc -->
- *
- * @generated
- */
- protected StructuralElementImpl()
- {
- super();
- }
-
- StructuralElementImpl(StructuralElement parent, String path, Doc doc)
- {
- setParent(parent);
- setPath(path);
- this.doc = doc;
- getDocumentation().registerElement(this);
-
- if (ArticleUtil.isTagged(doc, "@default"))
- {
- number = -1f;
- overview = true;
-
- Documentation documentation = getDocumentation();
- documentation.setDefaultElement(this);
- }
-
- Tag[] tags = doc.tags("@number");
- if (tags != null && tags.length != 0)
- {
- Tag[] inlineTags = tags[0].inlineTags();
- if (inlineTags != null && inlineTags.length != 0)
- {
- number = Float.parseFloat(inlineTags[0].text());
- }
- }
- }
-
- final void setPath(String path)
- {
- this.path = path;
- }
-
- final void setTitle(String title)
- {
- this.title = title;
- }
-
- /**
- * <!-- begin-user-doc --> <!-- end-user-doc -->
- *
- * @generated
- */
- @Override
- protected EClass eStaticClass()
- {
- return ArticlePackage.Literals.STRUCTURAL_ELEMENT;
- }
-
- /**
- * <!-- begin-user-doc --> <!-- end-user-doc -->
- *
- * @generated
- */
- public EList<StructuralElement> getChildren()
- {
- if (children == null)
- {
- children = new EObjectContainmentWithInverseEList<StructuralElement>(StructuralElement.class, this,
- ArticlePackage.STRUCTURAL_ELEMENT__CHILDREN, ArticlePackage.STRUCTURAL_ELEMENT__PARENT);
- }
- return children;
- }
-
- /**
- * <!-- begin-user-doc --> <!-- end-user-doc -->
- *
- * @generated
- */
- public StructuralElement getParent()
- {
- if (eContainerFeatureID() != ArticlePackage.STRUCTURAL_ELEMENT__PARENT)
- {
- return null;
- }
- return (StructuralElement)eContainer();
- }
-
- /**
- * <!-- begin-user-doc --> <!-- end-user-doc -->
- *
- * @generated
- */
- public NotificationChain basicSetParent(StructuralElement newParent, NotificationChain msgs)
- {
- msgs = eBasicSetContainer((InternalEObject)newParent, ArticlePackage.STRUCTURAL_ELEMENT__PARENT, msgs);
- return msgs;
- }
-
- /**
- * <!-- begin-user-doc --> <!-- end-user-doc -->
- *
- * @generated
- */
- public void setParent(StructuralElement newParent)
- {
- if (newParent != eInternalContainer() || eContainerFeatureID() != ArticlePackage.STRUCTURAL_ELEMENT__PARENT
- && newParent != null)
- {
- if (EcoreUtil.isAncestor(this, newParent))
- {
- throw new IllegalArgumentException("Recursive containment not allowed for " + toString());
- }
- NotificationChain msgs = null;
- if (eInternalContainer() != null)
- {
- msgs = eBasicRemoveFromContainer(msgs);
- }
- if (newParent != null)
- {
- msgs = ((InternalEObject)newParent).eInverseAdd(this, ArticlePackage.STRUCTURAL_ELEMENT__CHILDREN,
- StructuralElement.class, msgs);
- }
- msgs = basicSetParent(newParent, msgs);
- if (msgs != null)
- {
- msgs.dispatch();
- }
- }
- else if (eNotificationRequired())
- {
- eNotify(new ENotificationImpl(this, Notification.SET, ArticlePackage.STRUCTURAL_ELEMENT__PARENT, newParent,
- newParent));
- }
- }
-
- /**
- * <!-- begin-user-doc --> <!-- end-user-doc -->
- *
- * @generated
- */
- public String getTitle()
- {
- return title;
- }
-
- /**
- * <!-- begin-user-doc --> <!-- end-user-doc -->
- *
- * @generated NOT
- */
- public Documentation getDocumentation()
- {
- if (this instanceof Documentation)
- {
- return (Documentation)this;
- }
-
- StructuralElement parent = getParent();
- return parent.getDocumentation();
- }
-
- /**
- * <!-- begin-user-doc --> <!-- end-user-doc -->
- *
- * @generated NOT
- */
- public Doc getDoc()
- {
- return doc;
- }
-
- @Override
- public String linkFrom(StructuralElement source)
- {
- File sourceFile = source.getOutputFile();
- File targetFile = getOutputFile();
- return ArticleUtil.createLink(sourceFile, targetFile);
- }
-
- /**
- * <!-- begin-user-doc --> <!-- end-user-doc -->
- *
- * @generated
- */
- @SuppressWarnings("unchecked")
- @Override
- public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs)
- {
- switch (featureID)
- {
- case ArticlePackage.STRUCTURAL_ELEMENT__CHILDREN:
- return ((InternalEList<InternalEObject>)(InternalEList<?>)getChildren()).basicAdd(otherEnd, msgs);
- case ArticlePackage.STRUCTURAL_ELEMENT__PARENT:
- if (eInternalContainer() != null)
- {
- msgs = eBasicRemoveFromContainer(msgs);
- }
- return basicSetParent((StructuralElement)otherEnd, msgs);
- }
- return super.eInverseAdd(otherEnd, featureID, msgs);
- }
-
- /**
- * <!-- begin-user-doc --> <!-- end-user-doc -->
- *
- * @generated
- */
- @Override
- public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
- {
- switch (featureID)
- {
- case ArticlePackage.STRUCTURAL_ELEMENT__CHILDREN:
- return ((InternalEList<?>)getChildren()).basicRemove(otherEnd, msgs);
- case ArticlePackage.STRUCTURAL_ELEMENT__PARENT:
- return basicSetParent(null, msgs);
- }
- return super.eInverseRemove(otherEnd, featureID, msgs);
- }
-
- /**
- * <!-- begin-user-doc --> <!-- end-user-doc -->
- *
- * @generated
- */
- @Override
- public NotificationChain eBasicRemoveFromContainerFeature(NotificationChain msgs)
- {
- switch (eContainerFeatureID())
- {
- case ArticlePackage.STRUCTURAL_ELEMENT__PARENT:
- return eInternalContainer().eInverseRemove(this, ArticlePackage.STRUCTURAL_ELEMENT__CHILDREN,
- StructuralElement.class, msgs);
- }
- return super.eBasicRemoveFromContainerFeature(msgs);
- }
-
- /**
- * <!-- begin-user-doc --> <!-- end-user-doc -->
- *
- * @generated
- */
- @Override
- public Object eGet(int featureID, boolean resolve, boolean coreType)
- {
- switch (featureID)
- {
- case ArticlePackage.STRUCTURAL_ELEMENT__CHILDREN:
- return getChildren();
- case ArticlePackage.STRUCTURAL_ELEMENT__PARENT:
- return getParent();
- case ArticlePackage.STRUCTURAL_ELEMENT__TITLE:
- return getTitle();
- case ArticlePackage.STRUCTURAL_ELEMENT__DOCUMENTATION:
- return getDocumentation();
- case ArticlePackage.STRUCTURAL_ELEMENT__DOC:
- return getDoc();
- }
- return super.eGet(featureID, resolve, coreType);
- }
-
- /**
- * <!-- begin-user-doc --> <!-- end-user-doc -->
- *
- * @generated
- */
- @SuppressWarnings("unchecked")
- @Override
- public void eSet(int featureID, Object newValue)
- {
- switch (featureID)
- {
- case ArticlePackage.STRUCTURAL_ELEMENT__CHILDREN:
- getChildren().clear();
- getChildren().addAll((Collection<? extends StructuralElement>)newValue);
- return;
- case ArticlePackage.STRUCTURAL_ELEMENT__PARENT:
- setParent((StructuralElement)newValue);
- return;
- }
- super.eSet(featureID, newValue);
- }
-
- /**
- * <!-- begin-user-doc --> <!-- end-user-doc -->
- *
- * @generated
- */
- @Override
- public void eUnset(int featureID)
- {
- switch (featureID)
- {
- case ArticlePackage.STRUCTURAL_ELEMENT__CHILDREN:
- getChildren().clear();
- return;
- case ArticlePackage.STRUCTURAL_ELEMENT__PARENT:
- setParent((StructuralElement)null);
- return;
- }
- super.eUnset(featureID);
- }
-
- /**
- * <!-- begin-user-doc --> <!-- end-user-doc -->
- *
- * @generated
- */
- @Override
- public boolean eIsSet(int featureID)
- {
- switch (featureID)
- {
- case ArticlePackage.STRUCTURAL_ELEMENT__CHILDREN:
- return children != null && !children.isEmpty();
- case ArticlePackage.STRUCTURAL_ELEMENT__PARENT:
- return getParent() != null;
- case ArticlePackage.STRUCTURAL_ELEMENT__TITLE:
- return TITLE_EDEFAULT == null ? title != null : !TITLE_EDEFAULT.equals(title);
- case ArticlePackage.STRUCTURAL_ELEMENT__DOCUMENTATION:
- return getDocumentation() != null;
- case ArticlePackage.STRUCTURAL_ELEMENT__DOC:
- return DOC_EDEFAULT == null ? getDoc() != null : !DOC_EDEFAULT.equals(getDoc());
- }
- return super.eIsSet(featureID);
- }
-
- /**
- * <!-- begin-user-doc --> <!-- end-user-doc -->
- *
- * @generated
- */
- @Override
- public String toString()
- {
- if (eIsProxy())
- {
- return super.toString();
- }
-
- StringBuffer result = new StringBuffer(super.toString());
- result.append(" (title: ");
- result.append(title);
- result.append(')');
- return result.toString();
- }
-
- public String getPath()
- {
- return path;
- }
-
- public final String getFullPath()
- {
- if (fullPath == null)
- {
- fullPath = createFullPath();
- }
-
- return fullPath;
- }
-
- protected String createFullPath()
- {
- StructuralElement parent = getParent();
- if (parent != null)
- {
- return parent.getBasePathForChildren() + "/" + path;
- }
-
- return path;
- }
-
- public String getBasePathForChildren()
- {
- return new File(getFullPath()).getParentFile().toString();
- }
-
- public final File getOutputFile()
- {
- checkAnalyzed();
- if (outputFile == null)
- {
- outputFile = createOutputFile();
- }
-
- return outputFile;
- }
-
- protected File createOutputFile()
- {
- return new File(getDocumentation().getContext().getBaseFolder(), getFullPath());
- }
-
- public final File getBaseFolderForChildren()
- {
- return new File(getDocumentation().getContext().getBaseFolder(), getBasePathForChildren());
- }
-
- protected void collectNavElements(List<StructuralElement> navElements)
- {
- for (StructuralElement child : getSortedChildren())
- {
- ((StructuralElementImpl)child).collectNavElements(navElements);
- }
- }
-
- public boolean isOverview()
- {
- return overview;
- }
-
- public float getNumber()
- {
- return number;
- }
-
- public int getDepth()
- {
- int depth = 0;
- for (StructuralElement child : getChildren())
- {
- depth = Math.max(depth, child.getDepth());
- }
-
- return 1 + depth;
- }
-
- public String getImagePath()
- {
- File source = getOutputFile();
- File target = new File(getDocumentation().getProjectFolder(), "images");
- return ArticleUtil.createLink(source, target);
- }
-
- @Override
- public String getDefaultLabel()
- {
- return title;
- }
-
- @Override
- public String getTooltip()
- {
- return getKind() + " in " + getDocumentation().getTitle();
- }
-
- protected abstract String getKind();
-
- public List<StructuralElement> getSortedChildren()
- {
- checkAnalyzed();
- if (sortedChildren == null)
- {
- sortedChildren = new ArrayList<StructuralElement>(getChildren());
- Collections.sort(sortedChildren, new Comparator<StructuralElement>()
- {
- public int compare(StructuralElement body1, StructuralElement body2)
- {
- return new Float(body1.getNumber()).compareTo(body2.getNumber());
- }
- });
- }
-
- return sortedChildren;
- }
-
- public void generate() throws IOException
- {
- checkAnalyzed();
- for (StructuralElement child : getSortedChildren())
- {
- child.generate();
- }
- }
-
- public void generate(PrintWriter out) throws IOException
- {
- checkAnalyzed();
- for (StructuralElement child : getSortedChildren())
- {
- child.generate(out);
- }
- }
-
- protected void generate(File file) throws IOException
- {
- checkAnalyzed();
- Documentation documentation = getDocumentation();
- String title = getTitle() + " (" + documentation.getTitle() + ")";
- File cssFile = new File(documentation.getBaseFolderForChildren(), "book.css");
- String css = ArticleUtil.createLink(getOutputFile(), cssFile);
-
- PrintWriter out = null;
-
- try
- {
- file.getParentFile().mkdirs();
- out = new PrintWriter(file);
-
- out.write("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n");
- out.write("<HTML>\n");
- out.write("\n");
- out.write("<HEAD>\n");
- out.write("<TITLE>");
- out.write(title);
- out.write("</TITLE>\n");
- out.write("\n");
- out.write("<LINK REL=\"STYLESHEET\" HREF=\"" + css + "\" CHARSET=\"ISO-8859-1\" TYPE=\"text/css\">\n");
- out.write("\n");
- out.write("<SCRIPT type=\"text/javascript\">\n");
- out.write("function windowTitle()\n");
- out.write("{\n");
- out.write(" if (location.href.indexOf('is-external=true') == -1) {\n");
- out.write(" parent.document.title=\"" + title + "\";\n");
- out.write(" }\n");
- out.write("}\n");
- out.write("</SCRIPT>\n");
- out.write("<NOSCRIPT></NOSCRIPT>\n");
- out.write("</HEAD>\n");
- out.write("\n");
- out.write("<BODY BGCOLOR=\"white\" onload=\"windowTitle();\">\n");
-
- out.write("<!-- ");
- out.write("<div class=\"help_breadcrumbs\">");
- generateBreadCrumbs(out, this);
- out.write("</div>");
- out.write(" -->\n");
- out.write("\n");
-
- generate(out);
-
- out.write("<HR>\n");
- out.write("<i>Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.</i>\n");
- out.write("</BODY>\n");
- out.write("</HTML>\n");
- }
- finally
- {
- ArticleUtil.close(out);
- }
- }
-
- protected void generateBreadCrumbs(PrintWriter out, StructuralElement linkSource) throws IOException
- {
- checkAnalyzed();
- StructuralElement parent = getParent();
- if (parent instanceof StructuralElementImpl)
- {
- ((StructuralElementImpl)parent).generateBreadCrumbs(out, linkSource);
- }
- }
-
- protected void generateTocEntries(TocWriter writer) throws IOException
- {
- checkAnalyzed();
- for (StructuralElement child : getSortedChildren())
- {
- BodyImpl body = (BodyImpl)child;
- body.generateTocEntry(writer);
- }
- }
-
- protected void generateTocEntry(TocWriter writer) throws IOException
- {
- checkAnalyzed();
- writer.writeGroupStart(getTitle(), getTocHref(), null);
- generateTocEntries(writer);
- writer.writeGroupEnd();
- }
-
- protected File getTocTarget()
- {
- return getOutputFile();
- }
-
- protected String getTocHref()
- {
- File projectFolder = getDocumentation().getProjectFolder();
- File tocTarget = getTocTarget();
- return ArticleUtil.createLink(projectFolder, tocTarget);
- }
-
- protected void copyResources(File sourceFolder)
- {
- File targetFolder = getOutputFile().getParentFile();
- targetFolder.mkdirs();
-
- for (File file : sourceFolder.listFiles())
- {
- if (file.isFile())
- {
- String name = file.getName();
- if (!name.endsWith(".java") && !name.equals("package-info.java"))
- {
- File targetFile = new File(targetFolder, name);
- ArticleUtil.copyFile(file, targetFile);
- }
- }
- }
- }
-
- protected void checkAnalyzed()
- {
- Documentation documentation = getDocumentation();
- if (documentation == null || !documentation.isAnalyzed())
- {
- throw new AssertionError("Documentation analysis is not finished, yet");
- }
- }
-} // StructuralElementImpl
+/* + * <copyright> + * </copyright> + * + * $Id$ + */ +package org.eclipse.emf.cdo.releng.doc.article.impl; + +import org.eclipse.emf.cdo.releng.doc.article.ArticlePackage; +import org.eclipse.emf.cdo.releng.doc.article.Documentation; +import org.eclipse.emf.cdo.releng.doc.article.StructuralElement; +import org.eclipse.emf.cdo.releng.doc.article.impl.DocumentationImpl.TocWriter; +import org.eclipse.emf.cdo.releng.doc.article.util.ArticleUtil; + +import org.eclipse.emf.common.notify.Notification; +import org.eclipse.emf.common.notify.NotificationChain; +import org.eclipse.emf.common.util.EList; +import org.eclipse.emf.ecore.EClass; +import org.eclipse.emf.ecore.InternalEObject; +import org.eclipse.emf.ecore.impl.ENotificationImpl; +import org.eclipse.emf.ecore.util.EObjectContainmentWithInverseEList; +import org.eclipse.emf.ecore.util.EcoreUtil; +import org.eclipse.emf.ecore.util.InternalEList; + +import com.sun.javadoc.Doc; +import com.sun.javadoc.Tag; + +import java.io.File; +import java.io.IOException; +import java.io.PrintWriter; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; + +/** + * <!-- begin-user-doc --> An implementation of the model object '<em><b>Structural Element</b></em>'. <!-- end-user-doc + * --> + * <p> + * The following features are implemented: + * <ul> + * <li>{@link org.eclipse.emf.cdo.releng.doc.article.impl.StructuralElementImpl#getChildren <em>Children</em>}</li> + * <li>{@link org.eclipse.emf.cdo.releng.doc.article.impl.StructuralElementImpl#getParent <em>Parent</em>}</li> + * <li>{@link org.eclipse.emf.cdo.releng.doc.article.impl.StructuralElementImpl#getTitle <em>Title</em>}</li> + * <li>{@link org.eclipse.emf.cdo.releng.doc.article.impl.StructuralElementImpl#getOutputFile <em>Output File</em>}</li> + * <li>{@link org.eclipse.emf.cdo.releng.doc.article.impl.StructuralElementImpl#getDocumentation <em>Documentation</em>} + * </li> + * </ul> + * </p> + * + * @generated + */ +public abstract class StructuralElementImpl extends LinkTargetImpl implements StructuralElement +{ + /** + * The cached value of the '{@link #getChildren() <em>Children</em>}' containment reference list. <!-- begin-user-doc + * --> <!-- end-user-doc --> + * + * @see #getChildren() + * @generated + * @ordered + */ + protected EList<StructuralElement> children; + + /** + * The default value of the '{@link #getTitle() <em>Title</em>}' attribute. <!-- begin-user-doc --> <!-- end-user-doc + * --> + * + * @see #getTitle() + * @generated + * @ordered + */ + protected static final String TITLE_EDEFAULT = null; + + /** + * The cached value of the '{@link #getTitle() <em>Title</em>}' attribute. <!-- begin-user-doc --> <!-- end-user-doc + * --> + * + * @see #getTitle() + * @generated + * @ordered + */ + protected String title = TITLE_EDEFAULT; + + /** + * The default value of the '{@link #getDoc() <em>Doc</em>}' attribute. <!-- begin-user-doc --> <!-- end-user-doc --> + * + * @see #getDoc() + * @generated + * @ordered + */ + protected static final Doc DOC_EDEFAULT = null; + + private String fullPath; + + private File outputFile; + + private Doc doc; + + private boolean overview; + + private float number = 100f; + + private List<StructuralElement> sortedChildren; + + private String path; + + /** + * <!-- begin-user-doc --> <!-- end-user-doc --> + * + * @generated + */ + protected StructuralElementImpl() + { + super(); + } + + StructuralElementImpl(StructuralElement parent, String path, Doc doc) + { + setParent(parent); + setPath(path); + this.doc = doc; + getDocumentation().registerElement(this); + + if (ArticleUtil.isTagged(doc, "@default")) + { + number = -1f; + overview = true; + + Documentation documentation = getDocumentation(); + documentation.setDefaultElement(this); + } + + Tag[] tags = doc.tags("@number"); + if (tags != null && tags.length != 0) + { + Tag[] inlineTags = tags[0].inlineTags(); + if (inlineTags != null && inlineTags.length != 0) + { + number = Float.parseFloat(inlineTags[0].text()); + } + } + } + + final void setPath(String path) + { + this.path = path; + } + + final void setTitle(String title) + { + this.title = title; + } + + /** + * <!-- begin-user-doc --> <!-- end-user-doc --> + * + * @generated + */ + @Override + protected EClass eStaticClass() + { + return ArticlePackage.Literals.STRUCTURAL_ELEMENT; + } + + /** + * <!-- begin-user-doc --> <!-- end-user-doc --> + * + * @generated + */ + public EList<StructuralElement> getChildren() + { + if (children == null) + { + children = new EObjectContainmentWithInverseEList<StructuralElement>(StructuralElement.class, this, + ArticlePackage.STRUCTURAL_ELEMENT__CHILDREN, ArticlePackage.STRUCTURAL_ELEMENT__PARENT); + } + return children; + } + + /** + * <!-- begin-user-doc --> <!-- end-user-doc --> + * + * @generated + */ + public StructuralElement getParent() + { + if (eContainerFeatureID() != ArticlePackage.STRUCTURAL_ELEMENT__PARENT) + { + return null; + } + return (StructuralElement)eContainer(); + } + + /** + * <!-- begin-user-doc --> <!-- end-user-doc --> + * + * @generated + */ + public NotificationChain basicSetParent(StructuralElement newParent, NotificationChain msgs) + { + msgs = eBasicSetContainer((InternalEObject)newParent, ArticlePackage.STRUCTURAL_ELEMENT__PARENT, msgs); + return msgs; + } + + /** + * <!-- begin-user-doc --> <!-- end-user-doc --> + * + * @generated + */ + public void setParent(StructuralElement newParent) + { + if (newParent != eInternalContainer() || eContainerFeatureID() != ArticlePackage.STRUCTURAL_ELEMENT__PARENT + && newParent != null) + { + if (EcoreUtil.isAncestor(this, newParent)) + { + throw new IllegalArgumentException("Recursive containment not allowed for " + toString()); + } + NotificationChain msgs = null; + if (eInternalContainer() != null) + { + msgs = eBasicRemoveFromContainer(msgs); + } + if (newParent != null) + { + msgs = ((InternalEObject)newParent).eInverseAdd(this, ArticlePackage.STRUCTURAL_ELEMENT__CHILDREN, + StructuralElement.class, msgs); + } + msgs = basicSetParent(newParent, msgs); + if (msgs != null) + { + msgs.dispatch(); + } + } + else if (eNotificationRequired()) + { + eNotify(new ENotificationImpl(this, Notification.SET, ArticlePackage.STRUCTURAL_ELEMENT__PARENT, newParent, + newParent)); + } + } + + /** + * <!-- begin-user-doc --> <!-- end-user-doc --> + * + * @generated + */ + public String getTitle() + { + return title; + } + + /** + * <!-- begin-user-doc --> <!-- end-user-doc --> + * + * @generated NOT + */ + public Documentation getDocumentation() + { + if (this instanceof Documentation) + { + return (Documentation)this; + } + + StructuralElement parent = getParent(); + return parent.getDocumentation(); + } + + /** + * <!-- begin-user-doc --> <!-- end-user-doc --> + * + * @generated NOT + */ + public Doc getDoc() + { + return doc; + } + + @Override + public String linkFrom(StructuralElement source) + { + File sourceFile = source.getOutputFile(); + File targetFile = getOutputFile(); + return ArticleUtil.createLink(sourceFile, targetFile); + } + + /** + * <!-- begin-user-doc --> <!-- end-user-doc --> + * + * @generated + */ + @SuppressWarnings("unchecked") + @Override + public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) + { + switch (featureID) + { + case ArticlePackage.STRUCTURAL_ELEMENT__CHILDREN: + return ((InternalEList<InternalEObject>)(InternalEList<?>)getChildren()).basicAdd(otherEnd, msgs); + case ArticlePackage.STRUCTURAL_ELEMENT__PARENT: + if (eInternalContainer() != null) + { + msgs = eBasicRemoveFromContainer(msgs); + } + return basicSetParent((StructuralElement)otherEnd, msgs); + } + return super.eInverseAdd(otherEnd, featureID, msgs); + } + + /** + * <!-- begin-user-doc --> <!-- end-user-doc --> + * + * @generated + */ + @Override + public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) + { + switch (featureID) + { + case ArticlePackage.STRUCTURAL_ELEMENT__CHILDREN: + return ((InternalEList<?>)getChildren()).basicRemove(otherEnd, msgs); + case ArticlePackage.STRUCTURAL_ELEMENT__PARENT: + return basicSetParent(null, msgs); + } + return super.eInverseRemove(otherEnd, featureID, msgs); + } + + /** + * <!-- begin-user-doc --> <!-- end-user-doc --> + * + * @generated + */ + @Override + public NotificationChain eBasicRemoveFromContainerFeature(NotificationChain msgs) + { + switch (eContainerFeatureID()) + { + case ArticlePackage.STRUCTURAL_ELEMENT__PARENT: + return eInternalContainer().eInverseRemove(this, ArticlePackage.STRUCTURAL_ELEMENT__CHILDREN, + StructuralElement.class, msgs); + } + return super.eBasicRemoveFromContainerFeature(msgs); + } + + /** + * <!-- begin-user-doc --> <!-- end-user-doc --> + * + * @generated + */ + @Override + public Object eGet(int featureID, boolean resolve, boolean coreType) + { + switch (featureID) + { + case ArticlePackage.STRUCTURAL_ELEMENT__CHILDREN: + return getChildren(); + case ArticlePackage.STRUCTURAL_ELEMENT__PARENT: + return getParent(); + case ArticlePackage.STRUCTURAL_ELEMENT__TITLE: + return getTitle(); + case ArticlePackage.STRUCTURAL_ELEMENT__DOCUMENTATION: + return getDocumentation(); + case ArticlePackage.STRUCTURAL_ELEMENT__DOC: + return getDoc(); + } + return super.eGet(featureID, resolve, coreType); + } + + /** + * <!-- begin-user-doc --> <!-- end-user-doc --> + * + * @generated + */ + @SuppressWarnings("unchecked") + @Override + public void eSet(int featureID, Object newValue) + { + switch (featureID) + { + case ArticlePackage.STRUCTURAL_ELEMENT__CHILDREN: + getChildren().clear(); + getChildren().addAll((Collection<? extends StructuralElement>)newValue); + return; + case ArticlePackage.STRUCTURAL_ELEMENT__PARENT: + setParent((StructuralElement)newValue); + return; + } + super.eSet(featureID, newValue); + } + + /** + * <!-- begin-user-doc --> <!-- end-user-doc --> + * + * @generated + */ + @Override + public void eUnset(int featureID) + { + switch (featureID) + { + case ArticlePackage.STRUCTURAL_ELEMENT__CHILDREN: + getChildren().clear(); + return; + case ArticlePackage.STRUCTURAL_ELEMENT__PARENT: + setParent((StructuralElement)null); + return; + } + super.eUnset(featureID); + } + + /** + * <!-- begin-user-doc --> <!-- end-user-doc --> + * + * @generated + */ + @Override + public boolean eIsSet(int featureID) + { + switch (featureID) + { + case ArticlePackage.STRUCTURAL_ELEMENT__CHILDREN: + return children != null && !children.isEmpty(); + case ArticlePackage.STRUCTURAL_ELEMENT__PARENT: + return getParent() != null; + case ArticlePackage.STRUCTURAL_ELEMENT__TITLE: + return TITLE_EDEFAULT == null ? title != null : !TITLE_EDEFAULT.equals(title); + case ArticlePackage.STRUCTURAL_ELEMENT__DOCUMENTATION: + return getDocumentation() != null; + case ArticlePackage.STRUCTURAL_ELEMENT__DOC: + return DOC_EDEFAULT == null ? getDoc() != null : !DOC_EDEFAULT.equals(getDoc()); + } + return super.eIsSet(featureID); + } + + /** + * <!-- begin-user-doc --> <!-- end-user-doc --> + * + * @generated + */ + @Override + public String toString() + { + if (eIsProxy()) + { + return super.toString(); + } + + StringBuffer result = new StringBuffer(super.toString()); + result.append(" (title: "); + result.append(title); + result.append(')'); + return result.toString(); + } + + public String getPath() + { + return path; + } + + public final String getFullPath() + { + if (fullPath == null) + { + fullPath = createFullPath(); + } + + return fullPath; + } + + protected String createFullPath() + { + StructuralElement parent = getParent(); + if (parent != null) + { + return parent.getBasePathForChildren() + "/" + path; + } + + return path; + } + + public String getBasePathForChildren() + { + return new File(getFullPath()).getParentFile().toString(); + } + + public final File getOutputFile() + { + checkAnalyzed(); + if (outputFile == null) + { + outputFile = createOutputFile(); + } + + return outputFile; + } + + protected File createOutputFile() + { + return new File(getDocumentation().getContext().getBaseFolder(), getFullPath()); + } + + public final File getBaseFolderForChildren() + { + return new File(getDocumentation().getContext().getBaseFolder(), getBasePathForChildren()); + } + + protected void collectNavElements(List<StructuralElement> navElements) + { + for (StructuralElement child : getSortedChildren()) + { + ((StructuralElementImpl)child).collectNavElements(navElements); + } + } + + public boolean isOverview() + { + return overview; + } + + public float getNumber() + { + return number; + } + + public int getDepth() + { + int depth = 0; + for (StructuralElement child : getChildren()) + { + depth = Math.max(depth, child.getDepth()); + } + + return 1 + depth; + } + + public String getImagePath() + { + File source = getOutputFile(); + File target = new File(getDocumentation().getProjectFolder(), "images"); + return ArticleUtil.createLink(source, target); + } + + @Override + public String getDefaultLabel() + { + return title; + } + + @Override + public String getTooltip() + { + return getKind() + " in " + getDocumentation().getTitle(); + } + + protected abstract String getKind(); + + public List<StructuralElement> getSortedChildren() + { + checkAnalyzed(); + if (sortedChildren == null) + { + sortedChildren = new ArrayList<StructuralElement>(getChildren()); + Collections.sort(sortedChildren, new Comparator<StructuralElement>() + { + public int compare(StructuralElement body1, StructuralElement body2) + { + return new Float(body1.getNumber()).compareTo(body2.getNumber()); + } + }); + } + + return sortedChildren; + } + + public void generate() throws IOException + { + checkAnalyzed(); + for (StructuralElement child : getSortedChildren()) + { + child.generate(); + } + } + + public void generate(PrintWriter out) throws IOException + { + checkAnalyzed(); + for (StructuralElement child : getSortedChildren()) + { + child.generate(out); + } + } + + protected void generate(File file) throws IOException + { + checkAnalyzed(); + Documentation documentation = getDocumentation(); + String title = getTitle() + " (" + documentation.getTitle() + ")"; + File cssFile = new File(documentation.getBaseFolderForChildren(), "book.css"); + String css = ArticleUtil.createLink(getOutputFile(), cssFile); + + PrintWriter out = null; + + try + { + file.getParentFile().mkdirs(); + out = new PrintWriter(file); + + out.write("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n"); + out.write("<HTML>\n"); + out.write("\n"); + out.write("<HEAD>\n"); + out.write("<TITLE>"); + out.write(title); + out.write("</TITLE>\n"); + out.write("\n"); + out.write("<LINK REL=\"STYLESHEET\" HREF=\"" + css + "\" CHARSET=\"ISO-8859-1\" TYPE=\"text/css\">\n"); + out.write("\n"); + out.write("<SCRIPT type=\"text/javascript\">\n"); + out.write("function windowTitle()\n"); + out.write("{\n"); + out.write(" if (location.href.indexOf('is-external=true') == -1) {\n"); + out.write(" parent.document.title=\"" + title + "\";\n"); + out.write(" }\n"); + out.write("}\n"); + out.write("</SCRIPT>\n"); + out.write("<NOSCRIPT></NOSCRIPT>\n"); + out.write("</HEAD>\n"); + out.write("\n"); + out.write("<BODY BGCOLOR=\"white\" onload=\"windowTitle();\">\n"); + + out.write("<!-- "); + out.write("<div class=\"help_breadcrumbs\">"); + generateBreadCrumbs(out, this); + out.write("</div>"); + out.write(" -->\n"); + out.write("\n"); + + generate(out); + + out.write("<HR>\n"); + out.write("<i>Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.</i>\n"); + out.write("</BODY>\n"); + out.write("</HTML>\n"); + } + finally + { + ArticleUtil.close(out); + } + } + + protected void generateBreadCrumbs(PrintWriter out, StructuralElement linkSource) throws IOException + { + checkAnalyzed(); + StructuralElement parent = getParent(); + if (parent instanceof StructuralElementImpl) + { + ((StructuralElementImpl)parent).generateBreadCrumbs(out, linkSource); + } + } + + protected void generateTocEntries(TocWriter writer) throws IOException + { + checkAnalyzed(); + for (StructuralElement child : getSortedChildren()) + { + BodyImpl body = (BodyImpl)child; + body.generateTocEntry(writer); + } + } + + protected void generateTocEntry(TocWriter writer) throws IOException + { + checkAnalyzed(); + writer.writeGroupStart(getTitle(), getTocHref(), null); + generateTocEntries(writer); + writer.writeGroupEnd(); + } + + protected File getTocTarget() + { + return getOutputFile(); + } + + protected String getTocHref() + { + File projectFolder = getDocumentation().getProjectFolder(); + File tocTarget = getTocTarget(); + return ArticleUtil.createLink(projectFolder, tocTarget); + } + + protected void copyResources(File sourceFolder) + { + File targetFolder = getOutputFile().getParentFile(); + targetFolder.mkdirs(); + + for (File file : sourceFolder.listFiles()) + { + if (file.isFile()) + { + String name = file.getName(); + if (!name.endsWith(".java") && !name.equals("package-info.java")) + { + File targetFile = new File(targetFolder, name); + ArticleUtil.copyFile(file, targetFile); + } + } + } + } + + protected void checkAnalyzed() + { + Documentation documentation = getDocumentation(); + if (documentation == null || !documentation.isAnalyzed()) + { + throw new AssertionError("Documentation analysis is not finished, yet"); + } + } +} // StructuralElementImpl |