1765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye/*******************************************************************************
2765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * Copyright (c) 2011 Google, Inc.
3765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * All rights reserved. This program and the accompanying materials
4765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * are made available under the terms of the Eclipse Public License v1.0
5765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * which accompanies this distribution, and is available at
6765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * http://www.eclipse.org/legal/epl-v10.html
7765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye *
8765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * Contributors:
9765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye *    Google, Inc. - initial API and implementation
10765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye *******************************************************************************/
11765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyepackage org.eclipse.wb.internal.core.model.property;
12765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye
13765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyeimport org.eclipse.wb.internal.core.model.property.editor.TextDisplayPropertyEditor;
14765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyeimport org.eclipse.wb.internal.core.model.property.editor.complex.IComplexPropertyEditor;
15765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyeimport org.eclipse.wb.internal.core.model.property.editor.presentation.PropertyEditorPresentation;
16765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyeimport org.eclipse.wb.internal.core.model.property.table.PropertyTable;
17765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyeimport org.eclipse.wb.internal.core.model.property.table.PropertyTooltipProvider;
18765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyeimport org.eclipse.wb.internal.core.model.property.table.PropertyTooltipTextProvider;
19765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye
20765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyeimport org.eclipse.swt.graphics.Point;
21765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye
22765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyeimport java.util.List;
23765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye
24765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye/**
25765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * Implementation of {@link Property} that shows given inner {@link Property}'s using
26765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * {@link IComplexPropertyEditor}.
27765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye *
28765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * @author scheglov_ke
29765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * @coverage core.model.property
30765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye */
31765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyepublic class ComplexProperty extends Property {
32765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  private final String m_title;
33765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  private String m_text;
34765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  private String m_tooltip;
35765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  private boolean m_modified;
36765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  private Property[] m_properties;
37765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye
38765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  ////////////////////////////////////////////////////////////////////////////
39765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  //
40765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  // Constructors
41765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  //
42765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  ////////////////////////////////////////////////////////////////////////////
43765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  public ComplexProperty(String title, String text) {
44765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye    this(title, text, new Property[0]);
45765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  }
46765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye
47765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  public ComplexProperty(String title, String text, Property[] properties) {
48765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye    super(new ComplexPropertyEditor());
49765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye    m_title = title;
50765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye    m_text = text;
51765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye    setText(text);
52765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye    setProperties(properties);
53765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  }
54765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye
55765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  ////////////////////////////////////////////////////////////////////////////
56765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  //
57765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  // Access
58765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  //
59765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  ////////////////////////////////////////////////////////////////////////////
60765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  /**
61765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye   * Sets the text.
62765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye   */
63765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  public void setText(String text) {
64765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye    m_text = text;
65765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  }
66765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye
67765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  /**
68765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye   * @return the text to display as value.
69765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye   */
70765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  public String getText() throws Exception {
71765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye    return m_text;
72765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  }
73765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye
74765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  /**
75765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye   * Sets the tooltip text.
76765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye   */
77765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  public void setTooltip(String tooltip) {
78765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye    m_tooltip = tooltip;
79765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  }
80765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye
81765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  /**
82765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye   * Specifies the {@link PropertyEditorPresentation}, for example to displaying "..." button.
83765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye   */
84765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  public void setEditorPresentation(PropertyEditorPresentation presentation) {
85765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye    ((ComplexPropertyEditor) getEditor()).m_presentation = presentation;
86765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  }
87765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye
88765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  /**
89765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye   * @return the sub-properties.
90765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye   */
91765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  public Property[] getProperties() {
92765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye    return m_properties;
93765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  }
94765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye
95765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  /**
96765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye   * Sets the sub-properties.
97765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye   */
98765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  public void setProperties(Property[] properties) {
99765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye    m_properties = properties;
100765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  }
101765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye
102765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  /**
103765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye   * Sets the sub-properties.
104765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye   */
105765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  public void setProperties(List<Property> properties) {
106765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye    Property[] propertiesArray = properties.toArray(new Property[properties.size()]);
107765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye    setProperties(propertiesArray);
108765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  }
109765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye
110765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  /**
111765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye   * Sets the "modified" flag.
112765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye   */
113765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  public void setModified(boolean modified) {
114765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye    m_modified = modified;
115765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  }
116765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye
117765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  ////////////////////////////////////////////////////////////////////////////
118765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  //
119765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  // Property
120765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  //
121765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  ////////////////////////////////////////////////////////////////////////////
122765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  @Override
123765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  public String getTitle() {
124765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye    return m_title;
125765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  }
126765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye
127765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  @Override
128765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  public boolean isModified() throws Exception {
129765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye    return m_modified;
130765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  }
131765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye
132765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  @Override
133765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  public Object getValue() throws Exception {
134765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye    return null;
135765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  }
136765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye
137765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  @Override
138765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  public void setValue(Object value) throws Exception {
139765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  }
140765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye
141765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  ////////////////////////////////////////////////////////////////////////////
142765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  //
143765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  // Adapter
144765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  //
145765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  ////////////////////////////////////////////////////////////////////////////
146765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  @Override
147765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  public <T> T getAdapter(Class<T> adapter) {
148765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye    if (adapter == PropertyTooltipProvider.class && m_tooltip != null) {
149765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye      return adapter.cast(new PropertyTooltipTextProvider() {
150765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye        @Override
151765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye        protected String getText(Property property) throws Exception {
152765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye          return m_tooltip;
153765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye        }
154765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye      });
155765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye    }
156765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye    return super.getAdapter(adapter);
157765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  }
158765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye
159765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  ////////////////////////////////////////////////////////////////////////////
160765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  //
161765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  // ComplexPropertyEditor
162765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  //
163765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  ////////////////////////////////////////////////////////////////////////////
164765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  private static final class ComplexPropertyEditor extends TextDisplayPropertyEditor
165765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye      implements
166765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye        IComplexPropertyEditor {
167765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye    private PropertyEditorPresentation m_presentation;
168765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye
169765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye    ////////////////////////////////////////////////////////////////////////////
170765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye    //
171765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye    // IComplexPropertyEditor
172765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye    //
173765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye    ////////////////////////////////////////////////////////////////////////////
174765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye    public Property[] getProperties(Property property) throws Exception {
175765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye      return ((ComplexProperty) property).getProperties();
176765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye    }
177765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye
178765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye    ////////////////////////////////////////////////////////////////////////////
179765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye    //
180765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye    // TextDisplayPropertyEditor
181765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye    //
182765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye    ////////////////////////////////////////////////////////////////////////////
183765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye    @Override
184765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye    protected String getText(Property property) throws Exception {
185765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye      return ((ComplexProperty) property).getText();
186765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye    }
187765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye
188765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye    ////////////////////////////////////////////////////////////////////////////
189765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye    //
190765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye    // PropertyEditor
191765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye    //
192765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye    ////////////////////////////////////////////////////////////////////////////
193765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye    @Override
194765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye    public boolean activate(PropertyTable propertyTable, Property property, Point location)
195765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye        throws Exception {
196765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye      return false;
197765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye    }
198765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye
199765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye    ////////////////////////////////////////////////////////////////////////////
200765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye    //
201765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye    // Presentation
202765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye    //
203765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye    ////////////////////////////////////////////////////////////////////////////
204765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye    @Override
205765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye    public PropertyEditorPresentation getPresentation() {
206765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye      return m_presentation;
207765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye    }
208765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye  }
209765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye}
210