View Javadoc

1   /**
2    * This file Copyright (c) 2010-2011 Magnolia International
3    * Ltd.  (http://www.magnolia-cms.com). All rights reserved.
4    *
5    *
6    * This file is dual-licensed under both the Magnolia
7    * Network Agreement and the GNU General Public License.
8    * You may elect to use one or the other of these licenses.
9    *
10   * This file is distributed in the hope that it will be
11   * useful, but AS-IS and WITHOUT ANY WARRANTY; without even the
12   * implied warranty of MERCHANTABILITY or FITNESS FOR A
13   * PARTICULAR PURPOSE, TITLE, or NONINFRINGEMENT.
14   * Redistribution, except as permitted by whichever of the GPL
15   * or MNA you select, is prohibited.
16   *
17   * 1. For the GPL license (GPL), you can redistribute and/or
18   * modify this file under the terms of the GNU General
19   * Public License, Version 3, as published by the Free Software
20   * Foundation.  You should have received a copy of the GNU
21   * General Public License, Version 3 along with this program;
22   * if not, write to the Free Software Foundation, Inc., 51
23   * Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
24   *
25   * 2. For the Magnolia Network Agreement (MNA), this file
26   * and the accompanying materials are made available under the
27   * terms of the MNA which accompanies this distribution, and
28   * is available at http://www.magnolia-cms.com/mna.html
29   *
30   * Any modifications to this file must keep this entire header
31   * intact.
32   *
33   */
34  package info.magnolia.templating.editor.client;
35  
36  import info.magnolia.rendering.template.AreaDefinition;
37  import info.magnolia.templating.editor.client.dom.MgnlElement;
38  
39  import com.google.gwt.event.dom.client.MouseDownEvent;
40  import com.google.gwt.event.dom.client.MouseDownHandler;
41  import com.google.gwt.user.client.ui.Label;
42  
43  /**
44   * A Widget for adding components to area.
45   *
46   * @version $Id$
47   */
48  public class ComponentPlaceHolderWidget extends AbstractPlaceHolder {
49  
50      private boolean optional = false;
51      private boolean created = false;
52      private boolean showAddButton = false;
53      private String availableComponents = "";
54      private String type = "";
55      private String areaWorkspace = "";
56      private String areaPath = "";
57      private String name = "";
58  
59      public ComponentPlaceHolderWidget(PageEditor pageEditor, MgnlElement mgnlElement) {
60  
61          super(mgnlElement);
62          this.showAddButton = Boolean.parseBoolean(mgnlElement.getComment().getAttribute("showAddButton"));
63          this.optional = Boolean.parseBoolean(mgnlElement.getComment().getAttribute("optional"));
64          this.created = Boolean.parseBoolean(mgnlElement.getComment().getAttribute("created"));
65          this.type = mgnlElement.getComment().getAttribute("type");
66          this.name = mgnlElement.getComment().getAttribute("name");
67  
68  
69          String areaContent = mgnlElement.getComment().getAttribute("content");
70          int i = areaContent.indexOf(':');
71          this.areaWorkspace = areaContent.substring(0, i);
72          this.areaPath = areaContent.substring(i + 1);
73  
74          if(AreaDefinition.TYPE_NO_COMPONENT.equals(this.type)) {
75              this.availableComponents = "";
76          } else {
77              this.availableComponents = mgnlElement.getComment().getAttribute("availableComponents");
78          }
79  
80          this.addStyleName("component");
81          Label areaName = new Label("Add Component");
82  
83          setVisible(false);
84  
85          add(areaName);
86  
87          createMouseEventsHandlers(pageEditor);
88      }
89      private void createMouseEventsHandlers(final PageEditor pageEditor) {
90  
91          if (this.optional) {
92              if(!this.created) {
93                  addDomHandler(new MouseDownHandler() {
94  
95                      @Override
96                      public void onMouseDown(MouseDownEvent event) {
97                          pageEditor.createComponent(areaWorkspace, areaPath, "mgnl:area");
98  
99                      }
100                 }, MouseDownEvent.getType());
101             }
102             else {
103                 // move content away from edit
104                 //pageEditor.deleteComponent(path);
105             }
106         }
107 
108         else if (this.showAddButton){
109             addDomHandler(new MouseDownHandler() {
110 
111                 @Override
112                 public void onMouseDown(MouseDownEvent event) {
113                     pageEditor.addComponent(areaWorkspace, areaPath, null, availableComponents);
114 
115                 }
116             }, MouseDownEvent.getType());
117         }
118     }
119 
120     public void attach() {
121         PageEditor.model.getEditBar(getMgnlElement()).getElement().getParentElement().appendChild(getElement());
122         onAttach();
123     }
124 
125 }