KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > netbeans > modules > xml > schema > abe > NamespacePanel


1 /*
2  * The contents of this file are subject to the terms of the Common Development
3  * and Distribution License (the License). You may not use this file except in
4  * compliance with the License.
5  *
6  * You can obtain a copy of the License at http://www.netbeans.org/cddl.html
7  * or http://www.netbeans.org/cddl.txt.
8  *
9  * When distributing Covered Code, include this CDDL Header Notice in each file
10  * and include the License file at http://www.netbeans.org/cddl.txt.
11  * If applicable, add the following below the CDDL Header, with the fields
12  * enclosed by brackets [] replaced by your own identifying information:
13  * "Portions Copyrighted [year] [name of copyright owner]"
14  *
15  * The Original Software is NetBeans. The Initial Developer of the Original
16  * Software is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun
17  * Microsystems, Inc. All Rights Reserved.
18  */

19
20 /*
21  * NameSpacePanel.java
22  *
23  * Created on June 28, 2006, 4:12 PM
24  *
25  * To change this template, choose Tools | Template Manager
26  * and open the template in the editor.
27  */

28
29 package org.netbeans.modules.xml.schema.abe;
30
31 import java.awt.BorderLayout JavaDoc;
32 import java.awt.Color JavaDoc;
33 import java.awt.Font JavaDoc;
34 import java.awt.dnd.DropTargetDragEvent JavaDoc;
35 import java.awt.dnd.DropTargetDropEvent JavaDoc;
36 import java.awt.dnd.DropTargetEvent JavaDoc;
37 import java.awt.event.ActionEvent JavaDoc;
38 import java.awt.event.ActionListener JavaDoc;
39 import java.awt.event.KeyAdapter JavaDoc;
40 import java.awt.event.KeyEvent JavaDoc;
41 import java.awt.event.MouseAdapter JavaDoc;
42 import java.awt.event.MouseEvent JavaDoc;
43 import java.beans.PropertyChangeEvent JavaDoc;
44 import java.beans.PropertyChangeListener JavaDoc;
45 import java.net.URI JavaDoc;
46 import java.net.URISyntaxException JavaDoc;
47 import javax.swing.Box JavaDoc;
48 import javax.swing.JPanel JavaDoc;
49 import javax.swing.JSeparator JavaDoc;
50 import javax.swing.JTextField JavaDoc;
51 import javax.swing.border.EmptyBorder JavaDoc;
52 import javax.swing.border.LineBorder JavaDoc;
53 import org.netbeans.modules.xml.axi.AXIComponent;
54 import org.netbeans.modules.xml.axi.AXIDocument;
55 import org.netbeans.modules.xml.axi.AXIModel;
56 import org.netbeans.modules.xml.axi.ContentModel;
57 import org.netbeans.modules.xml.axi.Element;
58 import org.netbeans.modules.xml.schema.abe.nodes.ABEAbstractNode;
59 import org.netbeans.modules.xml.schema.abe.nodes.NamespaceNode;
60 import org.netbeans.modules.xml.schema.abe.palette.DnDHelper;
61 import org.openide.util.NbBundle;
62
63 /**
64  *
65  * @author girix
66  */

67 public class NamespacePanel extends GradientShadePanel{
68     protected static final long serialVersionUID = 7526472295622776147L;
69     private InplaceEditableLabel namespaceLabel;
70     /** Creates a new instance of NameSpacePanel */
71     public NamespacePanel(InstanceUIContext context) {
72         super(context);
73         super.selectedTopGradientColor = Color.WHITE;
74         super.selectedBottomGradientColor = Color.WHITE;
75         initialize();
76         initKeyListener();
77     }
78     
79     
80     private void initKeyListener(){
81         addKeyListener(new KeyAdapter JavaDoc() {
82             public void keyPressed(KeyEvent JavaDoc e) {
83                 if(context.getFocusTraversalManager().isFocusChangeEvent(e))
84                     context.getFocusTraversalManager().handleEvent(e, NamespacePanel.this);
85             }
86             
87         });
88     }
89     
90     private void initialize(){
91         setLayout(new BorderLayout JavaDoc());
92         setOpaque(false);
93         setBorder(new EmptyBorder JavaDoc(1,1,1,1));
94         //setBorder(new javax.swing.border.LineBorder(java.awt.Color.lightGray, 1, true));
95

96         String JavaDoc namespace = getNamespace();
97         namespaceLabel = new InplaceEditableLabel(namespace);
98         //Font font = namespaceLabel.getFont();
99
//namespaceLabel.setFont(new Font(font.getName(), Font.BOLD, font.getSize()));
100
namespaceLabel.setForeground(InstanceDesignConstants.NAMESPACE_COLOR);
101         namespaceLabel.setWidthMagnificationFactor(1);
102         initNamespaceEditListener();
103         initNamespaceChangeListener();
104         add(Box.createHorizontalStrut(TitleWrapperPanel.TITLE_BEGIN_FUDGE), BorderLayout.WEST);
105         add(Box.createVerticalStrut(5), BorderLayout.NORTH);
106         add(namespaceLabel, BorderLayout.CENTER);
107         JPanel JavaDoc botP = new JPanel JavaDoc(new BorderLayout JavaDoc());
108         botP.setOpaque(false);
109         botP.add(Box.createVerticalStrut(5), BorderLayout.NORTH);
110         JSeparator JavaDoc hline = new JSeparator JavaDoc();
111         hline.setForeground(new Color JavaDoc(250, 232, 213));
112         botP.add(hline, BorderLayout.CENTER);
113         add(botP, BorderLayout.SOUTH);
114         
115         /*JLabel msgLabel = new JLabel(" "+
116                 NbBundle.getMessage(InstanceDesignerPanel.class, "MSG_DROP_HERE_FOR_ELEMENT"));
117         msgLabel.setForeground(Color.gray);
118         namespacePanel.add(msgLabel, BorderLayout.CENTER);*/

119         //namespacePanel.add(Box.createVerticalStrut(10), BorderLayout.SOUTH);
120

121         addPropertyChangeListener(new PropertyChangeListener JavaDoc() {
122             public void propertyChange(PropertyChangeEvent JavaDoc evt) {
123                 if(evt.getPropertyName().equals(ABEBaseDropPanel.PROP_SELECTED)){
124                     Font JavaDoc font = namespaceLabel.getFont();
125                     if(((Boolean JavaDoc)evt.getNewValue()).booleanValue()){
126                         setBorder(new LineBorder JavaDoc(InstanceDesignConstants.XP_ORANGE, 2));
127                         namespaceLabel.setFont(new Font JavaDoc(font.getName(), Font.BOLD, font.getSize()));
128                     }else{
129                         setBorder(new EmptyBorder JavaDoc(1,1,1,1));
130                         namespaceLabel.setFont(new Font JavaDoc(font.getName(), Font.PLAIN, font.getSize()));
131                     }
132                 }
133             }
134         });
135         
136         addMouseListener(new MouseAdapter JavaDoc() {
137             public void mouseClicked(MouseEvent JavaDoc e) {
138                 mouseClickedActionHandler(e, false);
139             }
140             public void mouseEntered(MouseEvent JavaDoc e) {
141                 mouseClickedActionHandler(e, true);
142             }
143             public void mouseReleased(MouseEvent JavaDoc e) {
144                 mouseClickedActionHandler(e, true);
145             }
146         });
147     }
148     
149     public void mouseClickedActionHandler(MouseEvent JavaDoc e, boolean handelPopupOnly){
150         if(e.getClickCount() == 1){
151             if(e.isPopupTrigger()){
152                 context.getMultiComponentActionManager().showPopupMenu(e, NamespacePanel.this);
153                 return;
154             }
155             if(handelPopupOnly)
156                 return;
157             //the attr is selected
158
if(e.isControlDown())
159                 context.getComponentSelectionManager().addToSelectedComponents(NamespacePanel.this);
160             else
161                 context.getComponentSelectionManager().setSelectedComponent(NamespacePanel.this);
162         }
163     }
164     
165     public String JavaDoc getNamespace(){
166         String JavaDoc namespace = context.getAXIModel().getRoot().getTargetNamespace();
167         if(namespace == null)
168             return NbBundle.getMessage(
169                     NamespacePanel.class, "LBL_NO_NAMESPACE");
170         else
171             return namespace;
172     }
173     
174     public void setNamespaceInModel(String JavaDoc nsStr){
175         AXIModel model = context.getAXIModel();
176         model.startTransaction();
177         try{
178             model.getRoot().setTargetNamespace(nsStr);
179         }finally{
180             model.endTransaction();
181         }
182     }
183     
184     protected void initNamespaceEditListener(){
185         namespaceLabel.addPropertyChangeListener(new PropertyChangeListener JavaDoc() {
186             public void propertyChange(PropertyChangeEvent JavaDoc evt) {
187                 if(evt.getPropertyName().equals(namespaceLabel.PROPERTY_MODE_CHANGE)){
188                     if(evt.getNewValue() == InplaceEditableLabel.Mode.EDIT){
189                         //user selected edit give the editor JComponent
190
//show a text field
191
final JTextField JavaDoc field = new JTextField JavaDoc(getNamespace());
192                         field.select(0, field.getText().length());
193                         field.addActionListener(new ActionListener JavaDoc(){
194                             public void actionPerformed(ActionEvent JavaDoc e) {
195                                 String JavaDoc newName = field.getText();
196                                 try {
197                                     new URI JavaDoc(newName);
198                                 } catch (URISyntaxException JavaDoc ex) {
199                                     org.openide.ErrorManager.getDefault().notify(ex);
200                                     return;
201                                 }
202                                 setNamespaceInModel(newName);
203                                 namespaceLabel.setText(getNamespace());
204                             }
205                         });
206                         namespaceLabel.setInlineEditorComponent(field);
207                     }
208                 }
209             }
210         });
211     }
212     
213     
214     
215     
216     public void addElement(){
217         AXIDocument adoc = context.getAXIModel().getRoot();
218         AXIModel model = context.getAXIModel();
219         model.startTransaction();
220         try{
221             Element nelm = model.getComponentFactory().createElement();
222             String JavaDoc str = UIUtilities.getUniqueName(
223                     InstanceDesignConstants.NEW_ELEMENT_NAME, adoc);
224             nelm.setName(str);
225             adoc.addElement(nelm);
226         }finally{
227             context.setUserInducedEventMode(true, this);
228             model.endTransaction();
229         }
230     }
231     
232     public void addComplexType(){
233         AXIDocument adoc = context.getAXIModel().getRoot();
234         AXIModel model = context.getAXIModel();
235         model.startTransaction();
236         try{
237             ContentModel nelm = model.getComponentFactory().createComplexType();
238             String JavaDoc str = UIUtilities.getUniqueName(
239                     InstanceDesignConstants.NEW_COMPLEXTYPE_NAME, adoc);
240             nelm.setName(str);
241             adoc.addContentModel(nelm);
242         }finally{
243             context.setUserInducedEventMode(true, this);
244             model.endTransaction();
245         }
246     }
247     
248     public void drop(DropTargetDropEvent JavaDoc event) {
249         super.drop(event);
250         DnDHelper.PaletteItem pi = DnDHelper.getDraggedPaletteItem(event);
251         if( (pi != pi.ELEMENT) && (pi != pi.COMPLEXTYPE) )
252             event.rejectDrop();
253         else{
254             context.setUserInducedEventMode(true, this);
255             try{
256                 if(pi == pi.ELEMENT){
257                     addElement();
258                 } else if(pi == pi.COMPLEXTYPE){
259                     addComplexType();
260                 }
261             }finally{
262                 context.setUserInducedEventMode(false);
263             }
264         }
265     }
266     
267     public void dragExit(DropTargetEvent JavaDoc event) {
268         super.dragExit(event);
269     }
270     
271     public void dragOver(DropTargetDragEvent JavaDoc event) {
272         super.dragOver(event);
273         DnDHelper.PaletteItem pi = DnDHelper.getDraggedPaletteItem(event);
274         if( (pi != pi.ELEMENT) && (pi != pi.COMPLEXTYPE) )
275             event.rejectDrag();
276     }
277     
278     public void dragEnter(DropTargetDragEvent JavaDoc event) {
279         super.dragEnter(event);
280         DnDHelper.PaletteItem pi = DnDHelper.getDraggedPaletteItem(event);
281         if( (pi != pi.ELEMENT) && (pi != pi.COMPLEXTYPE) )
282             event.rejectDrag();
283     }
284     
285     NamespaceNode nsNode;
286     public ABEAbstractNode getNBNode() {
287         if(nsNode == null){
288             nsNode = new NamespaceNode(context.getAXIModel().getRoot(), context);
289         }
290         return nsNode;
291     }
292     
293     public AXIComponent getAXIComponent(){
294         return context.getAXIModel().getRoot();
295     }
296     
297     private void initNamespaceChangeListener() {
298         context.getAXIModel().getRoot().addPropertyChangeListener(new ModelEventMediator(this, context.getAXIModel().getRoot()){
299             public void _propertyChange(PropertyChangeEvent JavaDoc evt) {
300                 if(evt.getPropertyName().equals(AXIDocument.PROP_TARGET_NAMESPACE)){
301                     namespaceLabel.setText(getNamespace());
302                 }
303             }
304         });
305     }
306     
307     public void accept(UIVisitor visitor) {
308         visitor.visit(this);
309     }
310     
311     
312 }
313
Popular Tags