package org.nightlabs.jfire.reporting.admin.parameter.ui.property; import java.util.ArrayList; import java.util.List; import org.eclipse.ui.views.properties.IPropertyDescriptor; import org.eclipse.ui.views.properties.PropertyDescriptor; import org.nightlabs.base.ui.property.CheckboxPropertyDescriptor; import org.nightlabs.base.ui.property.IntPropertyDescriptor; import org.nightlabs.base.ui.property.XI18nTextPropertyDescriptor; import org.nightlabs.base.ui.property.XTextPropertyDescriptor; import org.nightlabs.i18n.I18nText; import org.nightlabs.jfire.reporting.admin.parameter.ui.editpart.ValueProviderConfigEditPart; import org.nightlabs.jfire.reporting.admin.parameter.ui.notification.ModelNotificationManager; import org.nightlabs.jfire.reporting.admin.parameter.ui.resource.Messages; import org.nightlabs.jfire.reporting.admin.parameter.ui.util.ObjectIDProvider; import org.nightlabs.jfire.reporting.parameter.ValueProvider; import org.nightlabs.jfire.reporting.parameter.config.IGraphicalInfoProvider; import org.nightlabs.jfire.reporting.parameter.config.ValueProviderConfig; import org.nightlabs.jfire.reporting.parameter.dao.ValueProviderDAO; import org.nightlabs.progress.NullProgressMonitor; /** * @author Daniel.Mazurek [at] NightLabs [dot] de * */ public class ValueProviderConfigPropertySource extends AbstractPropertySource { public ValueProviderConfigPropertySource(ValueProviderConfig valueProviderConfig) { super(); this.valueProviderConfig = valueProviderConfig; } private ValueProviderConfig valueProviderConfig = null; public ValueProviderConfig getValueProviderConfig() { return valueProviderConfig; } private ValueProvider valueProvider = null; protected ValueProvider getValueProvider() { if (valueProvider == null) { valueProvider = ValueProviderDAO.sharedInstance().getValueProvider( valueProviderConfig.getConfigValueProviderID(), ValueProviderConfigEditPart.FETCH_GROUPS, new NullProgressMonitor()); } return valueProvider; } //protected ValueProvider getValueProvider() //{ // return ValueProviderDAO.sharedInstance().getValueProvider( // valueProviderConfig.getConfigValueProviderID(), // ValueProviderConfigEditPart.FETCH_GROUPS, // new NullProgressMonitor()); //} public Object getEditableValue() { return valueProviderConfig; } protected IGraphicalInfoProvider getGraphicalInfoProvider() { return valueProviderConfig; } private int staticPropertyDescriptorSize = 12; private int getInpuParamterSize() { return getValueProvider().getInputParameters().size(); } public IPropertyDescriptor[] getPropertyDescriptors() { int inputParameters = getInpuParamterSize(); int finalSize = staticPropertyDescriptorSize + inputParameters * 2; IPropertyDescriptor[] propertyDescriptors = new IPropertyDescriptor[finalSize]; propertyDescriptors[0] = createXPD(false); propertyDescriptors[1] = createYPD(false); propertyDescriptors[2] = createNamePD(true); propertyDescriptors[3] = createDescriptionPD(true); propertyDescriptors[4] = createMessagePD(false); propertyDescriptors[5] = createShowMessageInHeaderPD(); propertyDescriptors[6] = createGrowVerticallyPD(); propertyDescriptors[7] = createPageIndexPD(); propertyDescriptors[8] = createPageRowPD(); propertyDescriptors[9] = createPageColumnPD(); propertyDescriptors[10] = createOutputTypePD(); propertyDescriptors[11] = createAllowOutputNullPD(); for (int i=0; i<inputParameters; i++) { int suffix = (i + 1); String suffixID = String.valueOf(suffix); int baseIdx = staticPropertyDescriptorSize + (i*2); propertyDescriptors[baseIdx] = createParameterIDPD(suffixID); String suffixType = String.valueOf(suffix); propertyDescriptors[baseIdx+1] = createParameterTypePD(suffixType, true); } return propertyDescriptors; } protected PropertyDescriptor createNamePD(boolean readOnly) { PropertyDescriptor desc = new XTextPropertyDescriptor( ModelNotificationManager.PROP_NAME, Messages.getString("org.nightlabs.jfire.reporting.admin.parameter.ui.property.ValueProviderConfigPropertySource.propertyDescriptorName.name"), //$NON-NLS-1$ readOnly); desc.setCategory(CATEGORY_NAME); return desc; } protected PropertyDescriptor createDescriptionPD(boolean readOnly) { PropertyDescriptor desc = new XTextPropertyDescriptor( ModelNotificationManager.PROP_DESCRIPTION, Messages.getString("org.nightlabs.jfire.reporting.admin.parameter.ui.property.ValueProviderConfigPropertySource.propertyDescriptorDescription.name"), //$NON-NLS-1$ readOnly); desc.setCategory(CATEGORY_NAME); return desc; } protected PropertyDescriptor createMessagePD(boolean readOnly) { // PropertyDescriptor desc = new XTextPropertyDescriptor( PropertyDescriptor desc = new XI18nTextPropertyDescriptor( ModelNotificationManager.PROP_MESSAGE, Messages.getString("org.nightlabs.jfire.reporting.admin.parameter.ui.property.ValueProviderConfigPropertySource.propertyDescriptorMessage.name"), //$NON-NLS-1$ readOnly); desc.setCategory(CATEGORY_NAME); return desc; } public static final String CATEGORY_PAGE = Messages.getString("org.nightlabs.jfire.reporting.admin.parameter.ui.property.ValueProviderConfigPropertySource.propertyDescriptorCategoryPage.name"); //$NON-NLS-1$ protected PropertyDescriptor createPageIndexPD() { PropertyDescriptor desc = new IntPropertyDescriptor( ModelNotificationManager.PROP_PAGE_INDEX, Messages.getString("org.nightlabs.jfire.reporting.admin.parameter.ui.property.ValueProviderConfigPropertySource.propertyDescriptorPageIndex.name"), //$NON-NLS-1$ false); desc.setCategory(CATEGORY_PAGE); return desc; } protected PropertyDescriptor createPageRowPD() { PropertyDescriptor desc = new IntPropertyDescriptor( ModelNotificationManager.PROP_PAGE_ROW, Messages.getString("org.nightlabs.jfire.reporting.admin.parameter.ui.property.ValueProviderConfigPropertySource.propertyDescriptorPageRow.name"), //$NON-NLS-1$ false); desc.setCategory(CATEGORY_PAGE); return desc; } protected PropertyDescriptor createPageColumnPD() { PropertyDescriptor desc = new IntPropertyDescriptor( ModelNotificationManager.PROP_PAGE_COLUMN, Messages.getString("org.nightlabs.jfire.reporting.admin.parameter.ui.property.ValueProviderConfigPropertySource.propertyDescriptorPageColumn.name"), //$NON-NLS-1$ false); desc.setCategory(CATEGORY_PAGE); return desc; } protected PropertyDescriptor createOutputTypePD() { PropertyDescriptor pd = new XTextPropertyDescriptor( ModelNotificationManager.PROP_OUTPUT_TYPE, Messages.getString("org.nightlabs.jfire.reporting.admin.parameter.ui.property.ValueProviderConfigPropertySource.propertyDescriptorOutputType.name"), //$NON-NLS-1$ true); return pd; } protected PropertyDescriptor createAllowOutputNullPD() { List<Boolean> trueFalse = new ArrayList<Boolean>(); trueFalse.add(true); trueFalse.add(false); PropertyDescriptor pd = new CheckboxPropertyDescriptor( ModelNotificationManager.PROP_ALLOW_OUTPUT_NULL_VALUE, Messages.getString("org.nightlabs.jfire.reporting.admin.parameter.ui.property.ValueProviderConfigPropertySource.propertyDescriptorAllowNull.name"), false //$NON-NLS-1$ ); return pd; } protected PropertyDescriptor createShowMessageInHeaderPD() { List<Boolean> trueFalse = new ArrayList<Boolean>(); trueFalse.add(true); trueFalse.add(false); PropertyDescriptor pd = new CheckboxPropertyDescriptor( ModelNotificationManager.PROP_SHOW_MESSAGE_IN_HEADER, Messages.getString("org.nightlabs.jfire.reporting.admin.parameter.ui.property.ValueProviderConfigPropertySource.propertyDescriptorShowMessage.name"), false //$NON-NLS-1$ ); pd.setCategory(Messages.getString("org.nightlabs.jfire.reporting.admin.parameter.ui.property.ValueProviderConfigPropertySource.propertyDescriptorCategoryName.name")); //$NON-NLS-1$ return pd; } protected PropertyDescriptor createGrowVerticallyPD() { List<Boolean> trueFalse = new ArrayList<Boolean>(); trueFalse.add(true); trueFalse.add(false); PropertyDescriptor pd = new CheckboxPropertyDescriptor( ModelNotificationManager.PROP_GROW_VERTICALLY, Messages.getString("org.nightlabs.jfire.reporting.admin.parameter.ui.property.ValueProviderConfigPropertySource.propertyGrowVertically.name"), false //$NON-NLS-1$ ); pd.setCategory(Messages.getString("org.nightlabs.jfire.reporting.admin.parameter.ui.property.ValueProviderConfigPropertySource.propertyDescriptorCategoryName.name")); //$NON-NLS-1$ return pd; } public Object getPropertyValue(Object id) { if (id.equals(IGraphicalInfoProvider.PROP_X)) { return getGraphicalInfoProvider().getX(); } else if (id.equals(IGraphicalInfoProvider.PROP_Y)) { return getGraphicalInfoProvider().getY(); } else if (id.equals(ModelNotificationManager.PROP_NAME)) { return getValueProvider().getName().getText(); } else if (id.equals(ModelNotificationManager.PROP_DESCRIPTION)) { return getValueProvider().getDescription().getText(); } else if (id.equals(ModelNotificationManager.PROP_PAGE_INDEX)) { return valueProviderConfig.getPageIndex(); } else if (id.equals(ModelNotificationManager.PROP_PAGE_ROW)) { return valueProviderConfig.getPageRow(); } else if (id.equals(ModelNotificationManager.PROP_PAGE_COLUMN)) { return valueProviderConfig.getPageColumn(); } else if (id.equals(ModelNotificationManager.PROP_OUTPUT_TYPE)) { return getValueProvider().getOutputType(); } else if (id.equals(ModelNotificationManager.PROP_MESSAGE)) { // return getValueProviderConfig().getMessage().getText(); return getValueProviderConfig().getMessage(); } else if (id.equals(ModelNotificationManager.PROP_ALLOW_OUTPUT_NULL_VALUE)) { return getValueProviderConfig().isAllowNullOutputValue(); } else if (id.equals(ModelNotificationManager.PROP_SHOW_MESSAGE_IN_HEADER)) { return getValueProviderConfig().isShowMessageInHeader(); } else if (id.equals(ModelNotificationManager.PROP_GROW_VERTICALLY)) { return getValueProviderConfig().isGrowVertically(); } for (int i=staticPropertyDescriptorSize; i<staticPropertyDescriptorSize+getInpuParamterSize(); i++) { int index = (i - staticPropertyDescriptorSize); int suffix = (i + 1 - staticPropertyDescriptorSize); String suffixID = String.valueOf(suffix); String suffixType = String.valueOf(suffix); if (id.equals(ModelNotificationManager.PROP_PARAMETER_ID + suffixID)) return getValueProvider().getInputParameters().get(index).getParameterID(); if (id.equals(ModelNotificationManager.PROP_PARAMETER_TYPE + suffixType)) return getValueProvider().getInputParameters().get(index).getParameterType(); } return null; } public void setPropertyValue(Object id, Object value) { if (id.equals(IGraphicalInfoProvider.PROP_X)) { int x = ((Integer)value).intValue(); getGraphicalInfoProvider().setX(x); ModelNotificationManager.sharedInstance().notify( ObjectIDProvider.getObjectID(valueProviderConfig), IGraphicalInfoProvider.PROP_X, -1, x); return; } else if (id.equals(IGraphicalInfoProvider.PROP_Y)) { int y = ((Integer)value).intValue(); getGraphicalInfoProvider().setY(y); ModelNotificationManager.sharedInstance().notify( ObjectIDProvider.getObjectID(valueProviderConfig), IGraphicalInfoProvider.PROP_Y, -1, y); return; } else if (id.equals(ModelNotificationManager.PROP_PAGE_INDEX)) { int pageIndex = ((Integer)value).intValue(); valueProviderConfig.setPageIndex(pageIndex); ModelNotificationManager.sharedInstance().notify( ObjectIDProvider.getObjectID(valueProviderConfig), ModelNotificationManager.PROP_PAGE_INDEX, -1, pageIndex); return; } else if (id.equals(ModelNotificationManager.PROP_PAGE_ROW)) { int pageRow = ((Integer)value).intValue(); valueProviderConfig.setPageRow(pageRow); ModelNotificationManager.sharedInstance().notify( ObjectIDProvider.getObjectID(valueProviderConfig), ModelNotificationManager.PROP_PAGE_ROW, -1, pageRow); return; } else if (id.equals(ModelNotificationManager.PROP_PAGE_COLUMN)) { int pageColumn = ((Integer)value).intValue(); valueProviderConfig.setPageColumn(pageColumn); ModelNotificationManager.sharedInstance().notify( ObjectIDProvider.getObjectID(valueProviderConfig), ModelNotificationManager.PROP_PAGE_COLUMN, -1, pageColumn); return; } else if (id.equals(ModelNotificationManager.PROP_ALLOW_OUTPUT_NULL_VALUE)) { boolean oldVal = valueProviderConfig.isAllowNullOutputValue(); valueProviderConfig.setAllowNullOutputValue(((Boolean)value).booleanValue()); ModelNotificationManager.sharedInstance().notify( ObjectIDProvider.getObjectID(valueProviderConfig), ModelNotificationManager.PROP_ALLOW_OUTPUT_NULL_VALUE, oldVal, ((Boolean)value).booleanValue()); return; } else if (id.equals(ModelNotificationManager.PROP_SHOW_MESSAGE_IN_HEADER)) { boolean oldVal = valueProviderConfig.isShowMessageInHeader(); valueProviderConfig.setShowMessageInHeader(((Boolean)value).booleanValue()); ModelNotificationManager.sharedInstance().notify( ObjectIDProvider.getObjectID(valueProviderConfig), ModelNotificationManager.PROP_SHOW_MESSAGE_IN_HEADER, oldVal, ((Boolean)value).booleanValue()); return; } else if (id.equals(ModelNotificationManager.PROP_GROW_VERTICALLY)) { boolean oldVal = valueProviderConfig.isGrowVertically(); valueProviderConfig.setGrowVertically(((Boolean)value).booleanValue()); ModelNotificationManager.sharedInstance().notify( ObjectIDProvider.getObjectID(valueProviderConfig), ModelNotificationManager.PROP_GROW_VERTICALLY, oldVal, ((Boolean)value).booleanValue()); return; } else if (id.equals(ModelNotificationManager.PROP_MESSAGE)) { I18nText text = (I18nText) value; valueProviderConfig.getMessage().copyFrom(text); ModelNotificationManager.sharedInstance().notify( ObjectIDProvider.getObjectID(valueProviderConfig), ModelNotificationManager.PROP_MESSAGE, -1, text); return; } } }