package org.openflexo.foundation.viewpoint;
import org.openflexo.fge.ConnectorGraphicalRepresentation;
import org.openflexo.fge.GraphicalRepresentation;
import org.openflexo.foundation.view.ViewConnector;
import org.openflexo.foundation.viewpoint.ViewPoint.ViewPointBuilder;
import org.openflexo.localization.FlexoLocalization;
public class ConnectorPatternRole extends GraphicalElementPatternRole {
// We dont want to import graphical engine in foundation
// But you can assert graphical representation is a org.openflexo.fge.ConnectorGraphicalRepresentation.
private ConnectorGraphicalRepresentation<?> _graphicalRepresentation;
// We dont want to import graphical engine in foundation
// But you can assert graphical representation here are a org.openflexo.fge.ShapeGraphicalRepresentation.
private Object artifactFromGraphicalRepresentation;
private Object artifactToGraphicalRepresentation;
public ConnectorPatternRole(ViewPointBuilder builder) {
super(builder);
}
@Override
protected void initDefaultSpecifications() {
super.initDefaultSpecifications();
for (GraphicalFeature<?, ?> GF : AVAILABLE_FEATURES) {
grSpecifications.add(new GraphicalElementSpecification(this, GF, false, true));
}
}
@Override
public PatternRoleType getType() {
return PatternRoleType.Connector;
}
@Override
public String getPreciseType() {
return FlexoLocalization.localizedForKey("connector");
}
@Override
public ConnectorGraphicalRepresentation<?> getGraphicalRepresentation() {
return _graphicalRepresentation;
}
@Override
public void setGraphicalRepresentation(GraphicalRepresentation<?> graphicalRepresentation) {
_graphicalRepresentation = (ConnectorGraphicalRepresentation<?>) graphicalRepresentation;
setChanged();
notifyObservers(new GraphicalRepresentationChanged(this, graphicalRepresentation));
}
public void updateGraphicalRepresentation(ConnectorGraphicalRepresentation<?> graphicalRepresentation) {
if (_graphicalRepresentation != null) {
((ConnectorGraphicalRepresentation<?>) _graphicalRepresentation).setsWith(graphicalRepresentation);
setChanged();
notifyObservers(new GraphicalRepresentationModified(this, graphicalRepresentation));
} else {
setGraphicalRepresentation(graphicalRepresentation);
}
}
// No notification
@Override
public void _setGraphicalRepresentationNoNotification(GraphicalRepresentation<?> graphicalRepresentation) {
_graphicalRepresentation = (ConnectorGraphicalRepresentation<?>) graphicalRepresentation;
}
public Object getArtifactFromGraphicalRepresentation() {
return artifactFromGraphicalRepresentation;
}
public void setArtifactFromGraphicalRepresentation(Object artifactFromGraphicalRepresentation) {
this.artifactFromGraphicalRepresentation = artifactFromGraphicalRepresentation;
setChanged();
notifyObservers(new GraphicalRepresentationChanged(this, artifactFromGraphicalRepresentation));
}
public Object getArtifactToGraphicalRepresentation() {
return artifactToGraphicalRepresentation;
}
public void setArtifactToGraphicalRepresentation(Object artifactToGraphicalRepresentation) {
this.artifactToGraphicalRepresentation = artifactToGraphicalRepresentation;
setChanged();
notifyObservers(new GraphicalRepresentationChanged(this, artifactToGraphicalRepresentation));
}
private ShapePatternRole startShapePatternRole;
private ShapePatternRole endShapePatternRole;
public ShapePatternRole getStartShapePatternRole() {
return startShapePatternRole;
}
public void setStartShapePatternRole(ShapePatternRole startShapePatternRole) {
this.startShapePatternRole = startShapePatternRole;
setChanged();
notifyObservers(new GraphicalRepresentationChanged(this,
startShapePatternRole != null ? startShapePatternRole.getGraphicalRepresentation() : artifactFromGraphicalRepresentation));
}
public boolean getStartShapeAsDefinedInAction() {
return getStartShapePatternRole() == null;
}
public void setStartShapeAsDefinedInAction(boolean flag) {
if (!flag && getEditionPattern().getShapePatternRoles().size() > 0) {
setStartShapePatternRole(getEditionPattern().getShapePatternRoles().get(0));
} else {
// System.out.println("setStartShapePatternRole with null");
setStartShapePatternRole(null);
}
}
public ShapePatternRole getEndShapePatternRole() {
return endShapePatternRole;
}
public void setEndShapePatternRole(ShapePatternRole endShapePatternRole) {
this.endShapePatternRole = endShapePatternRole;
setChanged();
notifyObservers(new GraphicalRepresentationChanged(this,
endShapePatternRole != null ? endShapePatternRole.getGraphicalRepresentation() : artifactToGraphicalRepresentation));
}
public boolean getEndShapeAsDefinedInAction() {
return getEndShapePatternRole() == null;
}
public void setEndShapeAsDefinedInAction(boolean flag) {
if (!flag && getEditionPattern().getShapePatternRoles().size() > 0) {
setEndShapePatternRole(getEditionPattern().getShapePatternRoles().get(0));
} else {
// System.out.println("setEndShapePatternRole with null");
setEndShapePatternRole(null);
}
}
/*public ShapePatternRole getStartShape() {
for (EditionScheme es : getEditionPattern().getEditionSchemes()) {
for (EditionAction action : es.getActions()) {
if ((action.getPatternRole() == this) && (action instanceof AddConnector)) {
AddConnector addConnector = (AddConnector) action;
for (PatternRole r : getEditionPattern().getPatternRoles()) {
if ((r instanceof ShapePatternRole) && (addConnector.getFromShape() != null)
&& addConnector.getFromShape().toString().equals(r.getPatternRoleName())) {
return (ShapePatternRole) r;
}
}
}
}
}
return null;
}
public ShapePatternRole getEndShape() {
for (EditionScheme es : getEditionPattern().getEditionSchemes()) {
for (EditionAction action : es.getActions()) {
if ((action.getPatternRole() == this) && (action instanceof AddConnector)) {
AddConnector addConnector = (AddConnector) action;
for (PatternRole r : getEditionPattern().getPatternRoles()) {
if ((r instanceof ShapePatternRole) && (addConnector.getToShape() != null)
&& addConnector.getToShape().toString().equals(r.getPatternRoleName())) {
return (ShapePatternRole) r;
}
}
}
}
}
return null;
}*/
@Override
public Class<?> getAccessedClass() {
return ViewConnector.class;
}
public static GraphicalFeature<?, ?>[] AVAILABLE_FEATURES = {};
}