/******************************************************************************* * Copyright (c) 2007 Exadel, Inc. and Red Hat, Inc. * Distributed under license by Red Hat, Inc. All rights reserved. * This program is 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 * * Contributors: * Exadel, Inc. and Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.jboss.tools.common.model.ui.forms; import java.util.*; import org.jboss.tools.common.meta.XAttribute; import org.jboss.tools.common.meta.XModelEntity; import org.jboss.tools.common.meta.impl.XModelMetaDataImpl; import org.jboss.tools.common.meta.key.WizardKeys; public class ModelFormLayoutData implements IFormLayoutData { public static String EMPTY_DESCRIPTION = ""; //$NON-NLS-1$ public static IFormData TAG_LIST = new FormData( "Tags", "", //"Description //$NON-NLS-1$ new FormAttributeData[]{new FormAttributeData("tag", 100)}, //$NON-NLS-1$ new String[]{"AnyElement"}, //$NON-NLS-1$ FormLayoutDataUtil.createDefaultFormActionData("CreateActions.CreateTag") //$NON-NLS-1$ ); private final static IFormData[] FORM_LAYOUT_DEFINITIONS = new IFormData[] { new FormData( "AnyElement", //$NON-NLS-1$ new String[]{null}, new IFormData[] { new FormData("org.jboss.tools.common.model.ui.forms.AnyElementForm"), //$NON-NLS-1$ new FormData( "Body Content", "", //"Description, description, description", //$NON-NLS-1$ new FormAttributeData[]{new FormAttributeData("text", InfoLayoutDataFactory.getInstance())} //$NON-NLS-1$ ), TAG_LIST } ), }; private static Map<String,IFormData> FORM_LAYOUT_DEFINITION_MAP = Collections.synchronizedMap(new ArrayToMap(FORM_LAYOUT_DEFINITIONS)); private static final ModelFormLayoutData INSTANCE = new ModelFormLayoutData(); public static ModelFormLayoutData getInstance() { return INSTANCE; } public IFormData getFormData(String entityName) { IFormData data = (IFormData)FORM_LAYOUT_DEFINITION_MAP.get(entityName); if(data == null) { data = generateDefaultFormData(entityName); } return data; } private IFormData generateDefaultFormData(String entityName) { IFormData data = null; XModelEntity entity = XModelMetaDataImpl.getInstance().getEntity(entityName); if(entity != null) { data = generateDefaultFormData(entity); } if(data != null) { FORM_LAYOUT_DEFINITION_MAP.put(entityName, data); } return data; } /** * Returns form data that has field editors for attributes * with property category=general * @param entity * @return */ public static IFormData createGeneralFormData(XModelEntity entity) { String entityName = entity.getName(); XAttribute attr = entity.getAttribute("element type"); //$NON-NLS-1$ String kind = attr == null ? entity.getXMLSubPath() : attr.getDefaultValue(); String label = WizardKeys.toDisplayName(kind); IFormAttributeData[] attrData = FormLayoutDataUtil.createGeneralFormAttributeData(entityName); if(attrData.length == 0) return null; FormData g = new FormData(label, EMPTY_DESCRIPTION, attrData); return g; } /** * Returns form data that has field editors for attributes * with property category=advanced * @param entity * @return */ public static IFormData createAdvancedFormData(String entityName) { IFormAttributeData[] attrData = FormLayoutDataUtil.createAdvancedFormAttributeData(entityName); if(attrData.length == 0) return null; FormData a = new FormData( "Advanced", EMPTY_DESCRIPTION, FormLayoutDataUtil.createAdvancedFormAttributeData(entityName) ); return a; } private IFormData generateDefaultFormData(XModelEntity entity) { String entityName = entity.getName(); List<IFormData> list = new ArrayList<IFormData>(); IFormData g = createGeneralFormData(entity); if(g != null) list.add(g); IFormData a = createAdvancedFormData(entityName); if(a != null) list.add(a); IFormData[] ds = list.toArray(new IFormData[0]); IFormData data = new FormData(entityName, new String[]{null}, ds); return data; } }