1 /*******************************************************************************
\r
2 * Copyright (c) 2006 Sybase, Inc. and others.
\r
4 * All rights reserved. This program and the accompanying materials
\r
5 * are made available under the terms of the Eclipse Public License v1.0
\r
6 * which accompanies this distribution, and is available at
\r
7 * http://www.eclipse.org/legal/epl-v10.html
\r
10 * Sybase, Inc. - initial API and implementation
\r
11 *******************************************************************************/
\r
12 package org.eclipse.jst.pagedesigner.meta.internal;
\r
14 import java.util.ArrayList;
\r
15 import java.util.HashMap;
\r
16 import java.util.List;
\r
17 import java.util.Map;
\r
19 import org.eclipse.jface.viewers.CellEditor;
\r
20 import org.eclipse.jst.jsf.common.ui.internal.dialogfield.DialogField;
\r
21 import org.eclipse.jst.jsf.common.ui.internal.dialogfield.ISupportTextValue;
\r
22 import org.eclipse.jst.jsf.common.ui.internal.dialogfield.StringDialogField;
\r
23 import org.eclipse.jst.pagedesigner.editors.properties.IPropertyPageDescriptor;
\r
24 import org.eclipse.jst.pagedesigner.meta.ITagAttributeCellEditorFactory;
\r
25 import org.eclipse.jst.pagedesigner.properties.celleditors.CellEditorFactory;
\r
26 import org.eclipse.swt.widgets.Composite;
\r
27 import org.w3c.dom.Element;
\r
30 * CellEditorFactoryRegistry also read information from plugin.xml extension to
\r
31 * allow other plugins to contribute new kinds of cell editors.
\r
34 public class CellEditorFactoryRegistry {
\r
35 // private static final Logger _log = PDPlugin
\r
36 // .getLogger(CellEditorFactoryRegistry.class);
\r
38 private static CellEditorFactoryRegistry _instance;
\r
40 private Map _factoryMap = new HashMap();
\r
42 private List _defaultFactories = new ArrayList();
\r
45 * @return singleton CellEditorFactoryRegistry
\r
47 public static CellEditorFactoryRegistry getInstance() {
\r
48 if (_instance == null) {
\r
49 _instance = new CellEditorFactoryRegistry();
\r
54 private CellEditorFactoryRegistry() {
\r
55 ITagAttributeCellEditorFactory[] facs = CellEditorFacRegistryReader
\r
58 for (int i = 0; i < facs.length; i++) {
\r
59 addCellEditorFactory(facs[i]);
\r
62 addCellEditorFactory(new CellEditorFactory());
\r
68 public void addCellEditorFactory(ITagAttributeCellEditorFactory fac) {
\r
69 String[] types = fac.getSupportedValueTypes();
\r
70 if (types == null || types.length == 0) {
\r
71 _defaultFactories.add(fac);
\r
73 for (int i = 0; i < types.length; i++) {
\r
74 _factoryMap.put(types[i], fac);
\r
80 * Return cell editor for attribute based upon runtime value type
\r
84 * @return CellEditor
\r
86 public CellEditor createCellEditor(Composite parent,
\r
87 IPropertyPageDescriptor attr, Element element) {
\r
88 String type = attr.getValueType();
\r
89 if (type == null || type.length() == 0)
\r
92 CellEditor result = null;
\r
93 ITagAttributeCellEditorFactory fac = (ITagAttributeCellEditorFactory) _factoryMap
\r
97 result = fac.createCellEditor(parent, attr, element);
\r
99 if (result == null) {
\r
100 for (int i = 0, size = _defaultFactories.size(); i < size; i++) {
\r
101 result = ((ITagAttributeCellEditorFactory) _defaultFactories
\r
102 .get(i)).createCellEditor(parent, attr, element);
\r
103 if (result != null)
\r
112 * @return DialogField
\r
114 public DialogField createDialogField(IPropertyPageDescriptor attr) {
\r
115 String type = attr.getValueType();
\r
116 if (type == null || type.length() == 0) {
\r
117 DialogField result = createTextDialogField(attr);
\r
118 result.setLabelText(attr.getLabel()); //labelProvider???
\r
121 // type = type.toUpperCase();
\r
123 DialogField result = null;
\r
124 ITagAttributeCellEditorFactory fac = (ITagAttributeCellEditorFactory) _factoryMap
\r
127 result = fac.createDialogField(attr);
\r
129 if (result == null) {
\r
130 for (int i = 0, size = _defaultFactories.size(); i < size; i++) {
\r
131 result = ((ITagAttributeCellEditorFactory) _defaultFactories
\r
132 .get(i)).createDialogField(attr);
\r
133 if (result != null) {
\r
138 if (result == null) {
\r
139 result = createTextDialogField(attr);
\r
141 if (!(result instanceof ISupportTextValue)) {
\r
142 result = createTextDialogField(attr);
\r
144 // result.setLabelText(attr.getLabel() + ":"); //$NON-NLS-1$
\r
150 * @return DialogField
\r
152 public DialogField createTextDialogField(IPropertyPageDescriptor attr) {
\r
153 StringDialogField field = new StringDialogField();
\r
154 field.setLabelText(attr.getLabel());
\r
155 field.setRequired(attr.isRequired());
\r
156 field.setToolTip(attr.getDescription());
\r