/******************************************************************************* * 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.editors.dnd; import org.jboss.tools.common.model.ui.editors.dnd.DropUtils.AttributeDescriptorValueProvider; import org.jboss.tools.common.model.ui.editors.dnd.composite.TagAttributesComposite.AttributeDescriptorValue; public class DefaultElementGenerator implements IElementGenerator { IDropWizardModel fDataModel; public void setDataModel(Object object) { if(object instanceof IDropWizardModel) { fDataModel = (IDropWizardModel)object; return; } throw new IllegalArgumentException("Object parameter must be instance of " + this.getClass().getName()); //$NON-NLS-1$ } public IDropWizardModel getWizardDataModel() { return fDataModel; } public DropData getDropData() { return fDataModel.getDropData(); } protected void generateChildren(ElementNode node) { } protected ElementNode generateRoot() { ElementNode root = RootNode.newRoot(); generateNode(root); return root; } protected void generateNode(ElementNode root) { ITagProposal proposal = getWizardDataModel().getTagProposal(); AttributeDescriptorValueProvider valueProvider = getWizardDataModel().getDropData().getValueProvider(); if(valueProvider != null) valueProvider.setProposal(proposal); String tagName = valueProvider == null ? null : valueProvider.getTag(); if(tagName != null) { String fullName = tagName; if(tagName.indexOf(':') < 0) { // for HTML fullName = fullName.toLowerCase(); } fullName = applayTagPreferences(fullName); ElementNode node = root.addChild(fullName); AttributeDescriptorValue[] values = getWizardDataModel().getAttributeValueDescriptors(); for(int i = 0; i < values.length; i++) { Object value = values[i].getValue(); if(value != null && !"".equals(value.toString().trim())) { //$NON-NLS-1$ node.addAttribute(applayAttributePreferences(values[i].getName()), value.toString()); } } generateChildren(node); if(valueProvider.canHaveBody()) { node.getChildren().add(SEPARATOR); node.empty = false; } } else { String prefix = getWizardDataModel().getTagProposal().getPrefix(); String name = getWizardDataModel().getTagProposal().getName(); if(prefix != null && prefix.length() > 0) { name = prefix + ":" + name; } root.addChild(name); } } public String generateStartTag() { generatedEndTag = ""; ElementNode root = generateRoot(); NodeWriter w = new NodeWriter(true); root.flush(w, 0); String[] result = w.getResult(); String startText = result[0]; generatedEndTag = result.length < 2 ? "" : result.length == 3 ? result[1] + "\n" + result[2] : result[1]; return startText; } protected String generatedEndTag = ""; //$NON-NLS-1$ public String generateEndTag() { return generatedEndTag; } protected String applayAttributePreferences(String attribute) { return attribute; } protected String applayTagPreferences(String tagName) { return tagName; } }