/*******************************************************************************
* 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 java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.Properties;
import org.eclipse.compare.Splitter;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.TabFolder;
import org.eclipse.swt.widgets.TabItem;
import org.jboss.tools.common.model.ui.editors.dnd.composite.TagAttributesComposite;
import org.jboss.tools.common.model.ui.editors.dnd.composite.TagAttributesComposite.AttributeDescriptorValue;
/**
*
* @author eskimo
*
*/
public class TagAttributesWizardPage extends DefaultDropWizardPage implements PropertyChangeListener {
protected Properties context = new Properties();
/**
*
*
*/
public TagAttributesWizardPage() {
super("Edit required and preferred attributes",""); //$NON-NLS-2$
}
/**
*
* @param pageName
*/
protected TagAttributesWizardPage(String pageName) {
super(pageName,""); //$NON-NLS-1$
}
private TabItem general = null;
private TabFolder tabs = null;
private TagAttributesComposite advancedTabContentOnly = null;
private Splitter composite = null;
/**
*
*/
public void createControl(Composite parent) {
showAttributes(parent);
}
protected void showAttributes(Composite parent) {
composite = new Splitter(parent,SWT.HORIZONTAL);
GridLayout layout = new GridLayout();
layout.marginWidth = 0;
layout.marginHeight = 0;
layout.numColumns = 1;
composite.setLayout(layout);
GridData data = new GridData(GridData.FILL_BOTH);
composite.setLayoutData(data);
tabs = new TabFolder(composite,SWT.TOP);
tabs.setLayoutData(data);
general = new TabItem(tabs,SWT.NONE);
general.setText(DropWizardMessages.General_Tab_Title);
final TagAttributesComposite generalTabContent = new TagAttributesComposite(tabs,SWT.NONE,getSpecificWizard().getWizardModel(),true, context);
general.setControl(generalTabContent);
TabItem advanced = new TabItem(tabs,SWT.NONE);
advanced.setText(DropWizardMessages.Advanced_Tab_Title);
final TagAttributesComposite advancedTabContent = new TagAttributesComposite(tabs,SWT.NONE,getSpecificWizard().getWizardModel(), context);
advanced.setControl(advancedTabContent);
advancedTabContentOnly = new TagAttributesComposite(composite,SWT.NONE,getSpecificWizard().getWizardModel(), context);
composite.setVisible(tabs,showAdvansedTab());
composite.setVisible(advancedTabContentOnly,!showAdvansedTab());
tabs.addSelectionListener(generalTabContent);
tabs.addSelectionListener(advancedTabContent);
tabs.addDisposeListener(new DisposeListener() {
public void widgetDisposed(DisposeEvent e) {
tabs.removeSelectionListener(generalTabContent);
tabs.removeSelectionListener(advancedTabContent);
tabs.removeDisposeListener(this);
}
});
setControl(composite);
getSpecificWizard().getWizardModel().addPropertyChangeListener(IDropWizardModel.TAG_PROPOSAL,this);
updateTitle();
runValidation();
}
/**
*
*/
public void propertyChange(PropertyChangeEvent evt) {
if(evt.getNewValue()!=IDropWizardModel.UNDEFINED_TAG_PROPOSAL) {
updateTitle();
composite.setVisible(tabs,showAdvansedTab());
composite.setVisible(advancedTabContentOnly,!showAdvansedTab());
composite.layout();
}
getControl().redraw();
}
/**
*
*
*/
protected void updateTitle() {
ITagProposal tagProposal = getDropWizardModel().getTagProposal();
StringBuffer titleText = new StringBuffer();
titleText.append("<"); //$NON-NLS-1$
if(!ITagProposal.EMPTY_PREFIX.equals(tagProposal.getPrefix())) {
titleText
.append(tagProposal.getPrefix())
.append(":"); //$NON-NLS-1$
}
titleText
.append(tagProposal.getName())
.append("> attributes"); //$NON-NLS-1$
setTitle(titleText.toString());
}
/*
*
*/
protected boolean showAdvansedTab() {
AttributeDescriptorValue[] values = getDropWizardModel().getAttributeValueDescriptors();
for(int i=0;i<values.length;i++) {
if(values[i].isPreferable() || values[i].isRequired()) {
return true;
}
}
return false;
}
/**
*
*/
public void validate() throws ValidationException {
/* IDropWizardModel model = getSpecificWizard().getWizardModel();
AttributeDescriptorValue[] values = model.getAttributeValueDescriptors();
for(int i=0;i<values.length;i++) {
if(values[i].isRequired()) {
String value = values[i].getValue()==null?"":values[i].getValue().toString();
if("".equals(value.trim()))
throw new ValidationException("Attribute '" + values[i].getName() + "' is required");
}
}*/
}
public void dispose() {
getSpecificWizard().getWizardModel().removePropertyChangeListener(IDropWizardModel.TAG_PROPOSAL,this);
super.dispose();
}
}