001: /*
002: * The contents of this file are subject to the terms of the Common Development
003: * and Distribution License (the License). You may not use this file except in
004: * compliance with the License.
005: *
006: * You can obtain a copy of the License at http://www.netbeans.org/cddl.html
007: * or http://www.netbeans.org/cddl.txt.
008: *
009: * When distributing Covered Code, include this CDDL Header Notice in each file
010: * and include the License file at http://www.netbeans.org/cddl.txt.
011: * If applicable, add the following below the CDDL Header, with the fields
012: * enclosed by brackets [] replaced by your own identifying information:
013: * "Portions Copyrighted [year] [name of copyright owner]"
014: *
015: * The Original Software is NetBeans. The Initial Developer of the Original
016: * Software is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun
017: * Microsystems, Inc. All Rights Reserved.
018: */
019:
020: package org.netbeans.modules.bpel.design.model.patterns;
021:
022: import java.util.Collection;
023: import org.netbeans.modules.bpel.editors.api.nodes.NodeType;
024:
025: import org.netbeans.modules.bpel.model.api.Activity;
026: import org.netbeans.modules.bpel.model.api.BpelEntity;
027: import org.netbeans.modules.bpel.model.api.CompensationHandler;
028: import org.netbeans.modules.bpel.design.geometry.FBounds;
029: import org.netbeans.modules.bpel.design.geometry.FDimension;
030: import org.netbeans.modules.bpel.design.layout.LayoutManager;
031: import org.netbeans.modules.bpel.design.model.DiagramModel;
032: import org.netbeans.modules.bpel.design.model.elements.GroupBorder;
033: import org.netbeans.modules.bpel.design.model.elements.PlaceHolderElement;
034: import org.netbeans.modules.bpel.design.model.elements.VisualElement;
035: import org.netbeans.modules.bpel.design.selection.PlaceHolder;
036:
037: public class CompensationHandlerPattern extends CompositePattern {
038:
039: private PlaceHolderElement placeHolder;
040:
041: /** Creates a new instance of CompensationHandlerPattern */
042: public CompensationHandlerPattern(DiagramModel model) {
043: super (model);
044: placeHolder = new PlaceHolderElement();
045: }
046:
047: public VisualElement getFirstElement() {
048: Pattern nestedPattern = getNestedPattern();
049:
050: if (nestedPattern == null) {
051: return placeHolder;
052: }
053: return nestedPattern.getFirstElement();
054: }
055:
056: public VisualElement getLastElement() {
057: return null;
058: }
059:
060: public void onAppendPattern(Pattern p) {
061: removeElement(placeHolder);
062: }
063:
064: public void onRemovePattern(Pattern p) {
065: appendElement(placeHolder);
066: }
067:
068: protected void createElementsImpl() {
069: setBorder(new GroupBorder());
070: getBorder().setLabelText(getDefaultName());
071:
072: placeHolder = new PlaceHolderElement();
073:
074: appendElement(placeHolder);
075:
076: BpelEntity a = ((CompensationHandler) getOMReference())
077: .getActivity();
078:
079: if (a != null) {
080: Pattern p = getModel().createPattern(a);
081: p.setParent(this );
082: }
083:
084: }
085:
086: public FBounds layoutPattern(LayoutManager manager) {
087: Collection<Pattern> patterns = super .getNestedPatterns();
088:
089: FDimension s;
090:
091: if (patterns.isEmpty()) {
092: placeHolder.setLocation(0, 0);
093: s = new FDimension(placeHolder.getWidth(), placeHolder
094: .getHeight());
095: } else {
096: manager.setPatternPosition(getNestedPattern(), 0, 0);
097: s = getNestedPattern().getBounds().getSize();
098: }
099: getBorder().setClientRectangle(0, 0, s.width, s.height);
100: return getBorder().getBounds();
101:
102: }
103:
104: public String getDefaultName() {
105: return "Compensation Handler"; // NOI18N
106: }
107:
108: public void createPlaceholders(Pattern draggedPattern,
109: Collection<PlaceHolder> placeHolders) {
110: if (!(draggedPattern.getOMReference() instanceof Activity))
111: return;
112:
113: if (placeHolder.getPattern() != null) {
114: placeHolders.add(new InnerPlaceHolder(draggedPattern));
115: }
116: }
117:
118: public NodeType getNodeType() {
119: return NodeType.COMPENSATION_HANDLER;
120: }
121:
122: private class InnerPlaceHolder extends PlaceHolder {
123: public InnerPlaceHolder(Pattern draggedPattern) {
124: super (CompensationHandlerPattern.this , draggedPattern,
125: placeHolder.getCenterX(), placeHolder.getCenterY());
126: }
127:
128: public void drop() {
129: Pattern p = getDraggedPattern();
130: ((CompensationHandler) getOMReference())
131: .setActivity((Activity) p.getOMReference());
132: }
133: }
134: }
|