/*****************************************************************************
* Copyright (c) 2012 CEA LIST.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Camille Letavernier (CEA LIST) camille.letavernier@cea.fr - Initial API and implementation
*****************************************************************************/
package org.eclipse.papyrus.infra.gmfdiag.properties.constraint;
import java.util.LinkedList;
import java.util.List;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.papyrus.infra.constraints.ConstraintDescriptor;
import org.eclipse.papyrus.infra.constraints.DisplayUnit;
import org.eclipse.papyrus.infra.constraints.constraints.Constraint;
import org.eclipse.papyrus.infra.gmfdiag.properties.extension.StyleHandlerManager;
import org.eclipse.papyrus.infra.gmfdiag.properties.modelelement.StyleHandlerProvider;
import org.eclipse.papyrus.views.properties.Activator;
/**
* A constraint matching an Object on which the Appearance properties can
* be applied. This constraint dispatches
*
* @author Camille Letavernier
*/
public class AppearanceConstraint implements Constraint {
private final List<Constraint> constraints;
private DisplayUnit display;
private ConstraintDescriptor descriptor;
public AppearanceConstraint() {
constraints = new LinkedList<Constraint>();
for(StyleHandlerProvider provider : StyleHandlerManager.instance.getStyleHandlerProviders()) {
try {
Constraint constraint = provider.createConstraint();
if(constraint == null) {
Activator.log.warn("StyleHandlerProvider " + provider.getClass().getName() + " provided an invalid Constraint");
} else {
constraints.add(constraint);
}
} catch (Exception ex) {
Activator.log.error(ex);
}
}
}
public boolean overrides(Constraint constraint) {
//Unsupported. The appearance property view constraints are not automatically overrideable
return false;
}
public boolean match(IStructuredSelection selection) {
for(Constraint constraint : constraints) {
if(constraint.match(selection)) {
return true;
}
}
return false;
}
public void setConstraintDescriptor(ConstraintDescriptor descriptor) {
this.descriptor = descriptor;
display = getDisplay(descriptor);
for(Constraint constraint : constraints) {
try {
constraint.setConstraintDescriptor(descriptor);
} catch (Exception ex) {
Activator.log.error(ex);
}
}
}
public DisplayUnit getDisplayUnit() {
return display;
}
private DisplayUnit getDisplay(ConstraintDescriptor descriptor) {
if(descriptor.getDisplay() == null) {
if(descriptor.eContainer() instanceof ConstraintDescriptor) {
return getDisplay((ConstraintDescriptor)descriptor.eContainer());
}
}
return descriptor.getDisplay();
}
public ConstraintDescriptor getDescriptor() {
return descriptor;
}
}