/* * (c) Copyright 2010-2011 AgileBirds * * This file is part of OpenFlexo. * * OpenFlexo is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * OpenFlexo is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with OpenFlexo. If not, see <http://www.gnu.org/licenses/>. * */ package org.openflexo.foundation.viewpoint; import java.util.Vector; import java.util.logging.Logger; import org.openflexo.antar.binding.BindingModel; import org.openflexo.fge.ConnectorGraphicalRepresentation; import org.openflexo.fge.GraphicalRepresentation; import org.openflexo.fge.ShapeGraphicalRepresentation; import org.openflexo.foundation.DataModification; import org.openflexo.foundation.Inspectors; import org.openflexo.foundation.viewpoint.ViewPoint.ViewPointBuilder; import org.openflexo.xmlcode.XMLMapping; public class ViewPointPaletteElement extends ViewPointObject { private static final Logger logger = Logger.getLogger(ViewPointPaletteElement.class.getPackage().getName()); private String name; private String description; private String _editionPatternId; private String _dropSchemeName; private EditionPattern editionPattern; private DropScheme dropScheme; private Vector<PaletteElementPatternParameter> parameters; private String patternRoleName; private boolean boundLabelToElementName = true; // Represent graphical representation to be used as representation in the palette private ShapeGraphicalRepresentation<?> graphicalRepresentation; // Represent graphical representation to be used as overriding representation private Vector<OverridingGraphicalRepresentation> overridingGraphicalRepresentations; private ViewPointPaletteElement parent = null; // private Vector<ViewPointPaletteElement> childs; private ViewPointPalette _palette; public ViewPointPaletteElement(ViewPointBuilder builder) { super(builder); overridingGraphicalRepresentations = new Vector<OverridingGraphicalRepresentation>(); parameters = new Vector<PaletteElementPatternParameter>(); } @Override public String getName() { return name; } @Override public void setName(String name) { this.name = name; } @Override public String getDescription() { return description; } @Override public void setDescription(String description) { this.description = description; } @Override public ViewPoint getViewPoint() { if (getPalette() != null) { return getPalette().getViewPoint(); } return null; } @Override public XMLMapping getXMLMapping() { return getViewPointLibrary().get_VIEW_POINT_PALETTE_MODEL(); } public ViewPointPalette getPalette() { return _palette; } public void setPalette(ViewPointPalette palette) { _palette = palette; } // Deserialization only, do not use public String _getEditionPatternId() { if (getEditionPattern() != null) { return getEditionPattern().getName(); } return _editionPatternId; } // Deserialization only, do not use public void _setEditionPatternId(String editionPatternId) { _editionPatternId = editionPatternId; } // Deserialization only, do not use public String _getDropSchemeName() { if (getDropScheme() != null) { return getDropScheme().getName(); } return _dropSchemeName; } // Deserialization only, do not use public void _setDropSchemeName(String _dropSchemeName) { this._dropSchemeName = _dropSchemeName; } public ViewPointPaletteElement getParent() { return parent; } public EditionPattern getEditionPattern() { if (editionPattern != null) { return editionPattern; } if (_editionPatternId != null && getViewPoint() != null) { editionPattern = getViewPoint().getEditionPattern(_editionPatternId); updateParameters(); } return editionPattern; } public void setEditionPattern(EditionPattern anEditionPattern) { if (anEditionPattern != editionPattern) { editionPattern = anEditionPattern; updateParameters(); } } public DropScheme getDropScheme() { if (dropScheme != null) { return dropScheme; } if (_dropSchemeName != null && getEditionPattern() != null && getEditionPattern().getEditionScheme(_dropSchemeName) instanceof DropScheme) { dropScheme = (DropScheme) getEditionPattern().getEditionScheme(_dropSchemeName); updateParameters(); } if (dropScheme == null && getEditionPattern() != null && getEditionPattern().getDropSchemes().size() > 0) { dropScheme = getEditionPattern().getDropSchemes().firstElement(); } return dropScheme; } public void setDropScheme(DropScheme aDropScheme) { if (dropScheme != aDropScheme) { dropScheme = aDropScheme; updateParameters(); } } public Vector<PaletteElementPatternParameter> getParameters() { return parameters; } public void setParameters(Vector<PaletteElementPatternParameter> parameters) { this.parameters = parameters; } public void addToParameters(PaletteElementPatternParameter parameter) { parameter.setElement(this); parameters.add(parameter); } public void removeFromParameters(PaletteElementPatternParameter parameter) { parameter.setElement(null); parameters.remove(parameter); } public PaletteElementPatternParameter getParameter(String name) { for (PaletteElementPatternParameter p : parameters) { if (p.getName().equals(name)) { return p; } } return null; } private void updateParameters() { if (editionPattern == null) { return; } Vector<PaletteElementPatternParameter> unusedParameterInstances = new Vector<PaletteElementPatternParameter>(); unusedParameterInstances.addAll(parameters); for (EditionScheme es : editionPattern.getEditionSchemes()) { for (EditionSchemeParameter parameter : es.getParameters()) { PaletteElementPatternParameter parameterInstance = getParameter(parameter.getName()); if (parameterInstance != null) { unusedParameterInstances.remove(parameterInstance); parameterInstance.setParameter(parameter); } else { parameterInstance = new PaletteElementPatternParameter(parameter); addToParameters(parameterInstance); } } } for (PaletteElementPatternParameter p : unusedParameterInstances) { removeFromParameters(p); } } public Vector<OverridingGraphicalRepresentation> getOverridingGraphicalRepresentations() { return overridingGraphicalRepresentations; } public void setOverridingGraphicalRepresentations(Vector<OverridingGraphicalRepresentation> overridingGraphicalRepresentations) { this.overridingGraphicalRepresentations.addAll(overridingGraphicalRepresentations); } public void addToOverridingGraphicalRepresentations(OverridingGraphicalRepresentation anOverridingGraphicalRepresentation) { overridingGraphicalRepresentations.add(anOverridingGraphicalRepresentation); anOverridingGraphicalRepresentation.paletteElement = this; setChanged(); notifyObservers(); } public void removeFromOverridingGraphicalRepresentations(OverridingGraphicalRepresentation anOverridingGraphicalRepresentation) { overridingGraphicalRepresentations.remove(anOverridingGraphicalRepresentation); anOverridingGraphicalRepresentation.paletteElement = null; setChanged(); notifyObservers(); } public GraphicalRepresentation<?> getOverridingGraphicalRepresentation(GraphicalElementPatternRole patternRole) { for (OverridingGraphicalRepresentation ogr : getOverridingGraphicalRepresentations()) { if (ogr.getPatternRoleName().equals(patternRole.getPatternRoleName())) { return ogr.getGraphicalRepresentation(); } } return null; } @Override public void finalizeDeserialization(Object builder) { super.finalizeDeserialization(builder); getEditionPattern(); updateParameters(); } @Override public void setChanged() { super.setChanged(); if (getPalette() != null) { getPalette().setIsModified(); } } @Override public void delete() { if (getPalette() != null) { getPalette().removeFromElements(this); } super.delete(); deleteObservers(); } @Override public String getInspectorName() { return Inspectors.VPM.CALC_PALETTE_ELEMENT_INSPECTOR; } public ShapeGraphicalRepresentation<?> getGraphicalRepresentation() { return graphicalRepresentation; } public void setGraphicalRepresentation(ShapeGraphicalRepresentation<?> graphicalRepresentation) { this.graphicalRepresentation = graphicalRepresentation; } public Vector<EditionPattern> allAvailableEditionPatterns() { if (getViewPoint() != null) { return getViewPoint().getAllEditionPatternWithDropScheme(); } return null; } @Override public BindingModel getBindingModel() { return getViewPoint().getBindingModel(); } public String getPatternRoleName() { return patternRoleName; } public void setPatternRoleName(String patternRoleName) { this.patternRoleName = patternRoleName; } public static abstract class OverridingGraphicalRepresentation extends ViewPointObject { private ViewPointPaletteElement paletteElement; private String patternRoleName; // Do not use, required for deserialization public OverridingGraphicalRepresentation(ViewPointBuilder builder) { super(builder); } // Do not use, required for deserialization public OverridingGraphicalRepresentation(GraphicalElementPatternRole patternRole) { super(null); patternRoleName = patternRole.getPatternRoleName(); } @Override public BindingModel getBindingModel() { if (getPaletteElement() != null) { return getPaletteElement().getBindingModel(); } return null; } @Override public String getInspectorName() { return null; } @Override public ViewPoint getViewPoint() { if (getPaletteElement() != null) { return getPaletteElement().getViewPoint(); } return null; } public ViewPointPaletteElement getPaletteElement() { return paletteElement; } public String getPatternRoleName() { return patternRoleName; } public void setPatternRoleName(String patternRoleName) { this.patternRoleName = patternRoleName; } public abstract GraphicalRepresentation<?> getGraphicalRepresentation(); @Override public String getLanguageRepresentation() { return "<not_implemented:" + getFullyQualifiedName() + ">"; } } public static class ShapeOverridingGraphicalRepresentation extends OverridingGraphicalRepresentation { private ShapeGraphicalRepresentation<?> graphicalRepresentation; // Do not use, required for deserialization public ShapeOverridingGraphicalRepresentation(ViewPointBuilder builder) { super(builder); } // Do not use, required for deserialization public ShapeOverridingGraphicalRepresentation(GraphicalElementPatternRole patternRole, ShapeGraphicalRepresentation<?> gr) { super(patternRole); graphicalRepresentation = gr; } @Override public ShapeGraphicalRepresentation<?> getGraphicalRepresentation() { return graphicalRepresentation; } public void setGraphicalRepresentation(ShapeGraphicalRepresentation<?> graphicalRepresentation) { this.graphicalRepresentation = graphicalRepresentation; } } public static class ConnectorOverridingGraphicalRepresentation extends OverridingGraphicalRepresentation { private ConnectorGraphicalRepresentation<?> graphicalRepresentation; // Do not use, required for deserialization public ConnectorOverridingGraphicalRepresentation(ViewPointBuilder builder) { super(builder); } // Do not use, required for deserialization public ConnectorOverridingGraphicalRepresentation(GraphicalElementPatternRole patternRole, ConnectorGraphicalRepresentation<?> gr) { super(patternRole); graphicalRepresentation = gr; } @Override public ConnectorGraphicalRepresentation<?> getGraphicalRepresentation() { return graphicalRepresentation; } public void setGraphicalRepresentation(ConnectorGraphicalRepresentation<?> graphicalRepresentation) { this.graphicalRepresentation = graphicalRepresentation; } } public boolean getBoundLabelToElementName() { return boundLabelToElementName; } public void setBoundLabelToElementName(boolean boundLabelToElementName) { if (this.boundLabelToElementName != boundLabelToElementName) { this.boundLabelToElementName = boundLabelToElementName; setChanged(); notifyObservers(new DataModification("boundLabelToElementName", !boundLabelToElementName, boundLabelToElementName)); } } @Override public String getLanguageRepresentation() { return "<not_implemented:" + getFullyQualifiedName() + ">"; } }