Java tutorial
/******************************************************************************* * Copyright 2011 Google Inc. All Rights Reserved. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. *******************************************************************************/ package com.google.gdt.eclipse.designer.uibinder.model.widgets; import org.eclipse.wb.internal.core.model.property.ComplexProperty; import org.eclipse.wb.internal.core.model.property.Property; import org.eclipse.wb.internal.core.model.property.category.PropertyCategory; import org.eclipse.wb.internal.core.model.property.editor.string.StringPropertyEditor; import org.eclipse.wb.internal.core.utils.reflect.ReflectionUtils; import org.eclipse.wb.internal.core.xml.model.EditorContext; import org.eclipse.wb.internal.core.xml.model.XmlObjectInfo; import org.eclipse.wb.internal.core.xml.model.broadcast.XmlObjectAddProperties; import org.eclipse.wb.internal.core.xml.model.creation.CreationSupport; import org.eclipse.wb.internal.core.xml.model.description.ComponentDescription; import org.eclipse.wb.internal.core.xml.model.description.GenericPropertyDescription; import org.eclipse.wb.internal.core.xml.model.property.GenericPropertyImpl; import org.eclipse.wb.internal.core.xml.model.property.accessor.ExpressionAccessor; import org.eclipse.wb.internal.core.xml.model.property.converter.StringConverter; import org.eclipse.wb.internal.core.xml.model.property.editor.StaticFieldPropertyEditor; import org.apache.commons.lang.StringUtils; import java.util.List; /** * Model for <code>com.google.gwt.user.client.ui.CellPanel</code> in GWT UiBinder. * * @author scheglov_ke * @coverage GWT.UiBinder.model */ public class CellPanelInfo extends ComplexPanelInfo { //////////////////////////////////////////////////////////////////////////// // // Constructor // //////////////////////////////////////////////////////////////////////////// public CellPanelInfo(EditorContext context, ComponentDescription description, CreationSupport creationSupport) throws Exception { super(context, description, creationSupport); contributeCellProperties(); } //////////////////////////////////////////////////////////////////////////// // // "Cell" complex property // //////////////////////////////////////////////////////////////////////////// /** * Contributes <code>"Cell"</code> complex property for each {@link WidgetInfo} child of this * {@link CellPanelInfo}. */ private void contributeCellProperties() { final CellPanelInfo panel = this; addBroadcastListener(new XmlObjectAddProperties() { public void invoke(XmlObjectInfo object, List<Property> properties) throws Exception { if (object instanceof WidgetInfo && object.getParent() == panel) { WidgetInfo widget = (WidgetInfo) object; // prepare "Cell" property Property cellProperty = (Property) widget.getArbitraryValue(this); if (cellProperty == null) { cellProperty = getCellComplexProperty(widget); widget.putArbitraryValue(this, cellProperty); } // add "Cell" property properties.add(cellProperty); } } private Property getCellComplexProperty(WidgetInfo widget) throws Exception { ClassLoader editorLoader = getContext().getClassLoader(); String namespace = StringUtils.substringBefore(getElement().getTag(), ":") + ":"; // "width" Property widthProperty; { ExpressionAccessor expressionAccessor = new CellExpressionAccessor(namespace, "width"); GenericPropertyDescription propertyDescription = new GenericPropertyDescription(null, "width", String.class, expressionAccessor); propertyDescription.setEditor(StringPropertyEditor.INSTANCE); propertyDescription.setConverter(StringConverter.INSTANCE); widthProperty = new GenericPropertyImpl(widget, propertyDescription); } // "height" Property heightProperty; { ExpressionAccessor expressionAccessor = new CellExpressionAccessor(namespace, "height"); GenericPropertyDescription propertyDescription = new GenericPropertyDescription(null, "height", String.class, expressionAccessor); propertyDescription.setEditor(StringPropertyEditor.INSTANCE); propertyDescription.setConverter(StringConverter.INSTANCE); heightProperty = new GenericPropertyImpl(widget, propertyDescription); } // "horizontalAlignment" Property horizontalAlignmentProperty; { StaticFieldPropertyEditor propertyEditor = new StaticFieldPropertyEditor(); Class<?> hasHorizontalAlignmentClass = editorLoader .loadClass("com.google.gwt.user.client.ui.HasHorizontalAlignment"); propertyEditor.configure(hasHorizontalAlignmentClass, new String[] { "ALIGN_LEFT", "ALIGN_CENTER", "ALIGN_RIGHT" }); Object defaultValue = ReflectionUtils.getFieldObject(hasHorizontalAlignmentClass, "ALIGN_LEFT"); // create property ExpressionAccessor expressionAccessor = new CellExpressionAccessor(namespace, "horizontalAlignment"); GenericPropertyDescription propertyDescription = new GenericPropertyDescription(null, "horizontalAlignment", String.class, expressionAccessor); propertyDescription.setEditor(propertyEditor); propertyDescription.setDefaultValue(defaultValue); horizontalAlignmentProperty = new GenericPropertyImpl(widget, propertyDescription); } // "verticalAlignment" Property verticalAlignmentProperty; { StaticFieldPropertyEditor propertyEditor = new StaticFieldPropertyEditor(); Class<?> hasVerticalAlignmentClass = editorLoader .loadClass("com.google.gwt.user.client.ui.HasVerticalAlignment"); propertyEditor.configure(hasVerticalAlignmentClass, new String[] { "ALIGN_TOP", "ALIGN_MIDDLE", "ALIGN_BOTTOM" }); Object defaultValue = ReflectionUtils.getFieldObject(hasVerticalAlignmentClass, "ALIGN_TOP"); // create property ExpressionAccessor expressionAccessor = new CellExpressionAccessor(namespace, "verticalAlignment"); GenericPropertyDescription propertyDescription = new GenericPropertyDescription(null, "verticalAlignment", String.class, expressionAccessor); propertyDescription.setEditor(propertyEditor); propertyDescription.setDefaultValue(defaultValue); verticalAlignmentProperty = new GenericPropertyImpl(widget, propertyDescription); } // create complex "Cell" property ComplexProperty cellProperty = new ComplexProperty("Cell", "(cell properties)"); cellProperty.setCategory(PropertyCategory.system(7)); cellProperty.setProperties(new Property[] { widthProperty, heightProperty, horizontalAlignmentProperty, verticalAlignmentProperty }); return cellProperty; } }); } }