package org.activiti.designer.diagram;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.graphiti.dt.IDiagramTypeProvider;
import org.eclipse.graphiti.features.IFeatureProvider;
import org.eclipse.graphiti.features.context.impl.UpdateContext;
import org.eclipse.graphiti.mm.pictograms.PictogramElement;
import org.eclipse.graphiti.notification.INotificationService;
public class ActivitiNotificationService implements INotificationService {
private final IDiagramTypeProvider diagramTypeProvider;
public ActivitiNotificationService(final IDiagramTypeProvider diagramTypeProvider) {
super();
this.diagramTypeProvider = diagramTypeProvider;
}
public IDiagramTypeProvider getDiagramTypeProvider() {
return diagramTypeProvider;
}
@Override
public PictogramElement[] calculateRelatedPictogramElements(Object[] bos) {
final List<Object> changedAndRelatedBOs = new ArrayList<Object>();
for (final Object bo : bos) {
changedAndRelatedBOs.add(bo);
}
final Object[] relatedBOs = diagramTypeProvider.getRelatedBusinessObjects(bos);
for (final Object bo : relatedBOs) {
changedAndRelatedBOs.add(bo);
}
return calculateLinkedPictogramElements(changedAndRelatedBOs);
}
private PictogramElement[] calculateLinkedPictogramElements(List<Object> changedAndRelatedBOs) {
final List<PictogramElement> result = new ArrayList<PictogramElement>();
final IFeatureProvider fp = diagramTypeProvider.getFeatureProvider();
for (final Object bo : changedAndRelatedBOs) {
final PictogramElement[] pes = fp.getAllPictogramElementsForBusinessObject(bo);
for (final PictogramElement pe : pes) {
result.add(pe);
}
}
return result.toArray(new PictogramElement[] {});
}
@Override
public void updatePictogramElements(PictogramElement[] pes) {
final IFeatureProvider fp = diagramTypeProvider.getFeatureProvider();
for (PictogramElement pe : pes) {
final UpdateContext updateContext = new UpdateContext(pe);
fp.updateIfPossibleAndNeeded(updateContext);
}
}
}