diff options
author | Claudia Knobloch | 2011-12-16 12:47:51 +0000 |
---|---|---|
committer | Claudia Knobloch | 2011-12-16 12:47:51 +0000 |
commit | 47afeada0ee1e1b761cca442eb9fa9f9e80a1343 (patch) | |
tree | 98068ac000a9034d86bb34cffb565772309ab683 | |
parent | 76675bbf61a996d9cfe3ef6c869ec5807db86775 (diff) | |
download | org.eclipse.ptp-47afeada0ee1e1b761cca442eb9fa9f9e80a1343.tar.gz org.eclipse.ptp-47afeada0ee1e1b761cca442eb9fa9f9e80a1343.tar.xz org.eclipse.ptp-47afeada0ee1e1b761cca442eb9fa9f9e80a1343.zip |
Fix the error in LayoutAccess::getLayoutFromModel()
2 files changed, 66 insertions, 69 deletions
diff --git a/rms/org.eclipse.ptp.rm.lml.core/src/org/eclipse/ptp/rm/lml/core/util/JAXBUtil.java b/rms/org.eclipse.ptp.rm.lml.core/src/org/eclipse/ptp/rm/lml/core/util/JAXBUtil.java index e72f66c56..03490552f 100644 --- a/rms/org.eclipse.ptp.rm.lml.core/src/org/eclipse/ptp/rm/lml/core/util/JAXBUtil.java +++ b/rms/org.eclipse.ptp.rm.lml.core/src/org/eclipse/ptp/rm/lml/core/util/JAXBUtil.java @@ -6,6 +6,7 @@ import java.io.StringReader; import java.io.StringWriter; import java.math.BigInteger; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; import javax.xml.bind.JAXBContext; @@ -22,6 +23,7 @@ import org.eclipse.ptp.rm.lml.internal.core.elements.AbslayoutType; import org.eclipse.ptp.rm.lml.internal.core.elements.ChartType; import org.eclipse.ptp.rm.lml.internal.core.elements.ChartgroupType; import org.eclipse.ptp.rm.lml.internal.core.elements.ColumnType; +import org.eclipse.ptp.rm.lml.internal.core.elements.ComponentType; import org.eclipse.ptp.rm.lml.internal.core.elements.ComponentlayoutType; import org.eclipse.ptp.rm.lml.internal.core.elements.DataType; import org.eclipse.ptp.rm.lml.internal.core.elements.GobjectType; @@ -31,6 +33,7 @@ import org.eclipse.ptp.rm.lml.internal.core.elements.LguiType; import org.eclipse.ptp.rm.lml.internal.core.elements.Nodedisplay; import org.eclipse.ptp.rm.lml.internal.core.elements.NodedisplaylayoutType; import org.eclipse.ptp.rm.lml.internal.core.elements.ObjectFactory; +import org.eclipse.ptp.rm.lml.internal.core.elements.PaneType; import org.eclipse.ptp.rm.lml.internal.core.elements.PatternMatchType; import org.eclipse.ptp.rm.lml.internal.core.elements.PatternType; import org.eclipse.ptp.rm.lml.internal.core.elements.SchemeType; @@ -180,6 +183,32 @@ public class JAXBUtil { } } + /** + * Search for gid-attributes of a pane and put it into neededComponents + * Recursively search all graphical objects referenced by this pane + * + * @param pane + * part of SplitLayout, which is scanned for gid-attributes + * @param components + * resulting Hashset + */ + private static void collectComponents(PaneType pane, HashSet<String> components) { + + if (pane.getGid() != null) { + components.add(pane.getGid()); + } else { + // top and bottom components? + if (pane.getBottom() != null) { + collectComponents(pane.getBottom(), components); + collectComponents(pane.getTop(), components); + } else {// Left and right + collectComponents(pane.getLeft(), components); + collectComponents(pane.getRight(), components); + } + } + + } + private JAXBUtil() { jaxbUtil = this; try { @@ -272,10 +301,6 @@ public class JAXBUtil { } - public void addLayoutTag(LguiType lgui, LayoutType layout) { - - } - public void addPatternInclude(PatternType pattern, PatternMatchType patternMatch) { pattern.getIncludeAndExclude().add( @@ -291,6 +316,38 @@ public class JAXBUtil { table)); } + public void getLayoutComponents(LguiType result, LguiType lgui, HashSet<String> components) { + + for (final JAXBElement<?> element : lgui.getObjectsAndRelationsAndInformation()) { + + final Object object = element.getValue(); + + if (object instanceof LayoutType) { + if (object instanceof SplitlayoutType) { + lgui.getObjectsAndRelationsAndInformation().add(element); + } else if (object instanceof AbslayoutType) { + lgui.getObjectsAndRelationsAndInformation().add(element); + } + + if (object instanceof SplitlayoutType) { + if (((SplitlayoutType) object).getLeft() != null) { + collectComponents(((SplitlayoutType) object).getLeft(), components); + collectComponents(((SplitlayoutType) object).getRight(), components); + } + } else if (object instanceof AbslayoutType) { + for (final ComponentType component : ((AbslayoutType) object).getComp()) { + components.add(component.getGid()); + } + } + } else if (object instanceof ComponentlayoutType) { + if (((ComponentlayoutType) object).isActive()) { + addComponentLayoutElement(result, (ComponentlayoutType) object); + components.add(((ComponentlayoutType) object).getGid()); + } + } + } + } + public ArrayList<Object> getObjects(LguiType lgui) { final ArrayList<Object> list = new ArrayList<Object>(); for (final JAXBElement<?> element : lgui diff --git a/rms/org.eclipse.ptp.rm.lml.core/src/org/eclipse/ptp/rm/lml/internal/core/model/LayoutAccess.java b/rms/org.eclipse.ptp.rm.lml.core/src/org/eclipse/ptp/rm/lml/internal/core/model/LayoutAccess.java index ca3a427b6..323913e74 100644 --- a/rms/org.eclipse.ptp.rm.lml.core/src/org/eclipse/ptp/rm/lml/internal/core/model/LayoutAccess.java +++ b/rms/org.eclipse.ptp.rm.lml.core/src/org/eclipse/ptp/rm/lml/internal/core/model/LayoutAccess.java @@ -31,12 +31,9 @@ import org.eclipse.ptp.rm.lml.internal.core.elements.ComponentType; import org.eclipse.ptp.rm.lml.internal.core.elements.ComponentlayoutType; import org.eclipse.ptp.rm.lml.internal.core.elements.GobjectType; import org.eclipse.ptp.rm.lml.internal.core.elements.InfoboxlayoutType; -import org.eclipse.ptp.rm.lml.internal.core.elements.LayoutType; import org.eclipse.ptp.rm.lml.internal.core.elements.LguiType; import org.eclipse.ptp.rm.lml.internal.core.elements.NodedisplaylayoutType; import org.eclipse.ptp.rm.lml.internal.core.elements.ObjectFactory; -import org.eclipse.ptp.rm.lml.internal.core.elements.PaneType; -import org.eclipse.ptp.rm.lml.internal.core.elements.SplitlayoutType; import org.eclipse.ptp.rm.lml.internal.core.elements.TableType; import org.eclipse.ptp.rm.lml.internal.core.elements.TablelayoutType; import org.eclipse.ptp.rm.lml.internal.core.elements.UsagebarlayoutType; @@ -116,32 +113,6 @@ public class LayoutAccess extends LguiHandler { } /** - * Search for gid-attributes of a pane and put it into neededComponents - * Recursively search all graphical objects referenced by this pane - * - * @param pane - * part of SplitLayout, which is scanned for gid-attributes - * @param components - * resulting Hashset - */ - private static void collectComponents(PaneType pane, HashSet<String> components) { - - if (pane.getGid() != null) { - components.add(pane.getGid()); - } else { - // top and bottom components? - if (pane.getBottom() != null) { - collectComponents(pane.getBottom(), components); - collectComponents(pane.getTop(), components); - } else {// Left and right - collectComponents(pane.getLeft(), components); - collectComponents(pane.getRight(), components); - } - } - - } - - /** * @param lguiItem * LML-data-handler, which groups this handler and others to a * set of LMLHandler. This instance is needed to notify all @@ -389,52 +360,21 @@ public class LayoutAccess extends LguiHandler { final HashSet<String> components = new HashSet<String>(); - for (final Object object : jaxbUtil.getObjects(lgui)) { - - // add normal global layouts - if (object instanceof LayoutType) { - jaxbUtil.addLayoutElement(result, object); - - if (object instanceof SplitlayoutType) { - final SplitlayoutType splitLayout = (SplitlayoutType) object; - // Collect needed components from layout recursively - if (splitLayout.getLeft() != null) { - collectComponents(splitLayout.getLeft(), components); - collectComponents(splitLayout.getRight(), components); - } - } else if (object instanceof AbslayoutType) { - final AbslayoutType absLayout = (AbslayoutType) object; - // Just traverse comp-list for gid-attributes - for (final ComponentType component : absLayout.getComp()) { - components.add(component.getGid()); - } - } - - } else if (object instanceof ComponentlayoutType) { - if (((ComponentlayoutType) object).isActive()) { - jaxbUtil.addComponentLayoutElement(result, - (ComponentlayoutType) object); - components.add(((ComponentlayoutType) object).getGid()); - } - } - } + jaxbUtil.getLayoutComponents(result, lgui, components); - final List<GobjectType> idToGobject = new LinkedList<GobjectType>(); - // Search needed components in data-tag to discover, which type the - // needed components have + final List<GobjectType> gobjectList = new LinkedList<GobjectType>(); for (final Object object : jaxbUtil.getObjects(lgui)) { // is it a graphical object? if (object instanceof GobjectType) { - final GobjectType gobject = (GobjectType) object; - if (components.contains(gobject.getId())) { - idToGobject.add(gobject); + if (components.contains(((GobjectType) object).getId())) { + gobjectList.add((GobjectType) object); } } } // Add all gobjects in idtoGobject to the result, so that lml-model is // valid - for (final GobjectType gobject : idToGobject) { + for (final GobjectType gobject : gobjectList) { result.getObjectsAndRelationsAndInformation().add( JAXBUtil.minimizeGobjectType(gobject, objectFactory)); } |