| /******************************************************************************* |
| * Copyright (c) 2000, 2003 IBM Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Common Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/cpl-v10.html |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.ui.examples.propertysheet; |
| |
| import java.util.Vector; |
| |
| import org.eclipse.jface.viewers.ICellEditorValidator; |
| import org.eclipse.jface.viewers.LabelProvider; |
| import org.eclipse.swt.graphics.RGB; |
| import org.eclipse.ui.views.properties.ColorPropertyDescriptor; |
| import org.eclipse.ui.views.properties.ComboBoxPropertyDescriptor; |
| import org.eclipse.ui.views.properties.IPropertyDescriptor; |
| import org.eclipse.ui.views.properties.IPropertySheetEntry; |
| import org.eclipse.ui.views.properties.PropertyDescriptor; |
| import org.eclipse.ui.views.properties.TextPropertyDescriptor; |
| |
| /** |
| * A User Element |
| */ |
| public class UserElement extends OrganizationElement { |
| |
| // Properties |
| private Name fullName; |
| |
| private Address address; |
| |
| private String phoneNumber; |
| |
| private EmailAddress emailAddress; |
| |
| private Boolean coop; |
| |
| private Birthday birthday; |
| |
| private Float salary; |
| |
| private RGB hairColor; |
| |
| private RGB eyeColor; |
| |
| // Property default values |
| private Name fullName_Default; |
| |
| private Address address_Default; |
| |
| private String phoneNumber_Default = "555-1111"; //$NON-NLS-1$ |
| |
| private EmailAddress emailAddress_Default; |
| |
| private Boolean coop_Default; |
| |
| private Birthday birthday_Default; |
| |
| private Float salary_Default; |
| |
| private RGB hairColor_Default; |
| |
| private RGB eyeColor_Default; |
| |
| // Property unique keys |
| public static final String P_ID_PHONENUMBER = "User.phonenumber"; //$NON-NLS-1$ |
| |
| public static final String P_ID_ADDRESS = "User.address"; //$NON-NLS-1$ |
| |
| public static final String P_ID_FULLNAME = "User.fullname"; //$NON-NLS-1$ |
| |
| public static final String P_ID_EMAIL = "User.email"; //$NON-NLS-1$ |
| |
| public static final String P_ID_COOP = "User.coop student"; //$NON-NLS-1$ |
| |
| public static final String P_ID_BDAY = "User.birthday"; //$NON-NLS-1$ |
| |
| public static final String P_ID_SALARY = "User.salary"; //$NON-NLS-1$ |
| |
| public static final String P_ID_HAIRCOLOR = "User.haircolor"; //$NON-NLS-1$ |
| |
| public static final String P_ID_EYECOLOR = "User.eyecolor"; //$NON-NLS-1$ |
| |
| // Property display keys |
| public static final String P_PHONENUMBER = MessageUtil |
| .getString("phonenumber"); //$NON-NLS-1$ |
| |
| public static final String P_ADDRESS = MessageUtil.getString("address"); //$NON-NLS-1$ |
| |
| public static final String P_FULLNAME = MessageUtil.getString("fullname"); //$NON-NLS-1$ |
| |
| public static final String P_EMAIL = MessageUtil.getString("email"); //$NON-NLS-1$ |
| |
| public static final String P_COOP = MessageUtil.getString("coop_student"); //$NON-NLS-1$ |
| |
| public static final String P_BDAY = MessageUtil.getString("birthday"); //$NON-NLS-1$ |
| |
| public static final String P_SALARY = MessageUtil.getString("salary"); //$NON-NLS-1$ |
| |
| public static final String P_HAIRCOLOR = MessageUtil.getString("haircolor"); //$NON-NLS-1$ |
| |
| public static final String P_EYECOLOR = MessageUtil.getString("eyecolor"); //$NON-NLS-1$ |
| |
| // Help context ids |
| private static final String PHONE_NUMBER_CONTEXT = "org.eclipse.ui.examples.propertysheet.phone_number_context"; //$NON-NLS-1$ |
| |
| private static final String ADDRESS_CONTEXT = "org.eclipse.ui.examples.propertysheet.address_context"; //$NON-NLS-1$ |
| |
| private static final String FULL_NAME_CONTEXT = "org.eclipse.ui.examples.propertysheet.full_name_context"; //$NON-NLS-1$ |
| |
| private static final String EMAIL_CONTEXT = "org.eclipse.ui.examples.propertysheet.email_context"; //$NON-NLS-1$ |
| |
| private static final String COOP_CONTEXT = "org.eclipse.ui.examples.propertysheet.coop_context"; //$NON-NLS-1$ |
| |
| private static final String BIRTHDAY_CONTEXT = "org.eclipse.ui.examples.propertysheet.birthday_context"; //$NON-NLS-1$ |
| |
| private static final String SALARY_CONTEXT = "org.eclipse.ui.examples.propertysheet.salary_context"; //$NON-NLS-1$ |
| |
| private static final String HAIR_COLOR__CONTEXT = "org.eclipse.ui.examples.propertysheet.hair_color_context"; //$NON-NLS-1$ |
| |
| private static final String EYE_COLOR_CONTEXT = "org.eclipse.ui.examples.propertysheet.eye_color_context"; //$NON-NLS-1$ |
| |
| // Property Category |
| public static final String P_CONTACTINFO = MessageUtil.getString("contact"); //$NON-NLS-1$ |
| |
| public static final String P_PERSONELINFO = MessageUtil |
| .getString("personel"); //$NON-NLS-1$ |
| |
| public static final String P_PERSONALINFO = MessageUtil |
| .getString("personal"); //$NON-NLS-1$ |
| |
| // Property Values |
| public static final Integer P_VALUE_TRUE = new Integer(0); |
| |
| public static final Integer P_VALUE_FALSE = new Integer(1); |
| |
| public static final String P_VALUE_TRUE_LABEL = MessageUtil |
| .getString("true"); //$NON-NLS-1$ |
| |
| public static final String P_VALUE_FALSE_LABEL = MessageUtil |
| .getString("false"); //$NON-NLS-1$ |
| |
| static private class BooleanLabelProvider extends LabelProvider { |
| public String getText(Object element) { |
| String[] values = new String[] { P_VALUE_TRUE_LABEL, |
| P_VALUE_FALSE_LABEL }; |
| return values[((Integer) element).intValue()]; |
| } |
| } |
| |
| // |
| static private Vector descriptors; |
| static { |
| descriptors = new Vector(); |
| PropertyDescriptor propertyDescriptor; |
| |
| /// |
| propertyDescriptor = new TextPropertyDescriptor(P_ID_PHONENUMBER, |
| P_PHONENUMBER); |
| propertyDescriptor.setCategory(P_CONTACTINFO); |
| propertyDescriptor.setHelpContextIds(PHONE_NUMBER_CONTEXT); |
| descriptors.addElement(propertyDescriptor); |
| |
| /// |
| propertyDescriptor = new PropertyDescriptor(P_ID_ADDRESS, P_ADDRESS); |
| propertyDescriptor.setCategory(P_CONTACTINFO); |
| propertyDescriptor.setHelpContextIds(ADDRESS_CONTEXT); |
| descriptors.addElement(propertyDescriptor); |
| |
| /// |
| propertyDescriptor = new TextPropertyDescriptor(P_ID_EMAIL, P_EMAIL); |
| propertyDescriptor.setCategory(P_CONTACTINFO); |
| propertyDescriptor.setHelpContextIds(EMAIL_CONTEXT); |
| propertyDescriptor.setValidator(new EmailAddressValidator()); |
| descriptors.addElement(propertyDescriptor); |
| |
| /// |
| propertyDescriptor = new TextPropertyDescriptor(P_ID_FULLNAME, |
| P_FULLNAME); |
| propertyDescriptor.setCategory(P_PERSONELINFO); |
| propertyDescriptor.setHelpContextIds(FULL_NAME_CONTEXT); |
| descriptors.addElement(propertyDescriptor); |
| |
| /// |
| propertyDescriptor = new PropertyDescriptor(P_ID_BDAY, P_BDAY); |
| propertyDescriptor.setCategory(P_PERSONELINFO); |
| propertyDescriptor.setHelpContextIds(BIRTHDAY_CONTEXT); |
| descriptors.addElement(propertyDescriptor); |
| |
| /// |
| propertyDescriptor = new ComboBoxPropertyDescriptor(P_ID_COOP, P_COOP, |
| new String[] { P_VALUE_TRUE_LABEL, P_VALUE_FALSE_LABEL }); |
| propertyDescriptor.setCategory(P_PERSONELINFO); |
| propertyDescriptor.setHelpContextIds(COOP_CONTEXT); |
| propertyDescriptor.setLabelProvider(new BooleanLabelProvider()); |
| descriptors.addElement(propertyDescriptor); |
| |
| /// |
| propertyDescriptor = new TextPropertyDescriptor(P_ID_SALARY, P_SALARY); |
| //add custom validator to propertyDescriptor limiting salary values to be |
| //greator than zero |
| propertyDescriptor.setHelpContextIds(new Object[] { SALARY_CONTEXT }); |
| propertyDescriptor |
| .setFilterFlags(new String[] { IPropertySheetEntry.FILTER_ID_EXPERT }); |
| propertyDescriptor.setValidator(new ICellEditorValidator() { |
| public String isValid(Object value) { |
| if (value == null) |
| return MessageUtil.getString("salary_is_invalid"); //$NON-NLS-1$ |
| // |
| Float trySalary; |
| try { |
| trySalary = new Float(Float.parseFloat((String) value)); |
| } catch (NumberFormatException e) { |
| return MessageUtil.getString("salary_is_invalid"); //$NON-NLS-1$ |
| } |
| if (trySalary.floatValue() < 0.0) |
| return MessageUtil |
| .getString("salary_must_be_greator_than_zero"); //$NON-NLS-1$ |
| return null; |
| } |
| }); |
| propertyDescriptor.setCategory(P_PERSONELINFO); |
| descriptors.addElement(propertyDescriptor); |
| |
| /// HairColor |
| propertyDescriptor = new ColorPropertyDescriptor(P_ID_HAIRCOLOR, |
| P_HAIRCOLOR); |
| propertyDescriptor.setCategory(P_PERSONALINFO); |
| propertyDescriptor.setHelpContextIds(HAIR_COLOR__CONTEXT); |
| descriptors.addElement(propertyDescriptor); |
| |
| /// EyeColor |
| propertyDescriptor = new ColorPropertyDescriptor(P_ID_EYECOLOR, |
| P_EYECOLOR); |
| propertyDescriptor.setCategory(P_PERSONALINFO); |
| propertyDescriptor.setHelpContextIds(EYE_COLOR_CONTEXT); |
| descriptors.addElement(propertyDescriptor); |
| |
| //gets descriptors from parent, warning name-space collision may occur |
| Vector parentDescriptors = OrganizationElement.getDescriptors(); |
| for (int i = 0; i < parentDescriptors.size(); i++) { |
| descriptors.addElement(parentDescriptors.elementAt(i)); |
| } |
| } |
| |
| /** |
| * Constructor. Default visibility only called from GroupElement.createSubGroup() |
| * Creates a new UserElement within the passed parent GroupElement, |
| * * |
| * @param name the name |
| * @param parent the parent |
| */ |
| UserElement(String name, GroupElement parent) { |
| super(name, parent); |
| } |
| |
| /** |
| * Returns the address |
| */ |
| private Address getAddress() { |
| if (address == null) |
| address = new Address(); |
| return address; |
| } |
| |
| /** |
| * Returns the birthday |
| */ |
| private Birthday getBirthday() { |
| if (birthday == null) |
| birthday = new Birthday(); |
| return birthday; |
| } |
| |
| /* (non-Javadoc) |
| * Method declared on IWorkbenchAdapter |
| */ |
| public Object[] getChildren(Object o) { |
| return new Object[0]; |
| } |
| |
| /** |
| * Returns the coop |
| */ |
| private Boolean getCoop() { |
| if (coop == null) |
| coop = new Boolean(false); |
| return coop; |
| } |
| |
| /** |
| * Returns the descriptors |
| */ |
| static Vector getDescriptors() { |
| return descriptors; |
| } |
| |
| /* (non-Javadoc) |
| * Method declared on IPropertySource |
| */ |
| public Object getEditableValue() { |
| return this.toString(); |
| } |
| |
| /** |
| * Returns the email address |
| */ |
| EmailAddress getEmailAddress() { |
| if (emailAddress == null) |
| emailAddress = new EmailAddress(); |
| return emailAddress; |
| } |
| |
| /** |
| * Returns the eye color |
| */ |
| private RGB getEyeColor() { |
| if (eyeColor == null) |
| eyeColor = new RGB(60, 60, 60); |
| return eyeColor; |
| } |
| |
| /** |
| * Returns the full name |
| */ |
| private Name getFullName() { |
| if (fullName == null) |
| fullName = new Name(getName()); |
| return fullName; |
| } |
| |
| /** |
| * Returns the hair color |
| */ |
| private RGB getHairColor() { |
| if (hairColor == null) |
| hairColor = new RGB(255, 255, 255); |
| return hairColor; |
| } |
| |
| /** |
| * Returns the phone number |
| */ |
| private String getPhoneNumber() { |
| return phoneNumber; |
| } |
| |
| /* (non-Javadoc) |
| * Method declared on IPropertySource |
| */ |
| public IPropertyDescriptor[] getPropertyDescriptors() { |
| return (IPropertyDescriptor[]) getDescriptors().toArray( |
| new IPropertyDescriptor[getDescriptors().size()]); |
| } |
| |
| /** |
| * The <code>Userment</code> implementation of this |
| * <code>IPropertySource</code> method returns the following properties |
| * |
| * 1) P_ADDRESS returns Address (IPropertySource), the address of this user |
| * 2) P_FULLNAME returns Name (IPropertySource), the full name of this user |
| * 3) P_PHONENUMBER returns String, the phone number of this user |
| * 4) P_EMAIL returns EmailAddress (IPropertySource), the email address of this user |
| * 5) P_COOP returns Boolean, whether the individual is a coop student or not |
| * 6) P_BDAY returns Birthday |
| * 7) P_SALARY return java.lang.Float |
| * 8) P_HAIRCOLOR, expects RGB |
| * 9) P_EYECOLOR, expects RGB |
| */ |
| public Object getPropertyValue(Object propKey) { |
| if (propKey.equals(P_ID_ADDRESS)) |
| return getAddress(); |
| if (propKey.equals(P_ID_FULLNAME)) |
| return getFullName(); |
| if (propKey.equals(P_ID_PHONENUMBER)) |
| return getPhoneNumber(); |
| if (propKey.equals(P_ID_EMAIL)) |
| return getEmailAddress(); |
| if (propKey.equals(P_ID_COOP)) |
| return getCoop().equals(Boolean.TRUE) ? P_VALUE_TRUE |
| : P_VALUE_FALSE; |
| if (propKey.equals(P_ID_BDAY)) |
| return getBirthday(); |
| if (propKey.equals(P_ID_SALARY)) |
| return getSalary().toString(); |
| if (propKey.equals(P_ID_HAIRCOLOR)) |
| return getHairColor(); |
| if (propKey.equals(P_ID_EYECOLOR)) |
| return getEyeColor(); |
| return super.getPropertyValue(propKey); |
| } |
| |
| /** |
| * Returns the salary |
| */ |
| private Float getSalary() { |
| if (salary == null) |
| salary = new Float(0); |
| return salary; |
| } |
| |
| /* (non-Javadoc) |
| * Method declared on IPropertySource |
| */ |
| public boolean isPropertySet(Object property) { |
| if (property.equals(P_ID_ADDRESS)) |
| return getAddress() != address_Default; |
| if (property.equals(P_ID_FULLNAME)) |
| return getFullName() != fullName_Default; |
| if (property.equals(P_ID_PHONENUMBER)) |
| return getPhoneNumber() != phoneNumber_Default; |
| if (property.equals(P_ID_EMAIL)) |
| return getEmailAddress() != emailAddress_Default; |
| if (property.equals(P_ID_COOP)) |
| return getCoop() != coop_Default; |
| if (property.equals(P_ID_BDAY)) |
| return getBirthday() != birthday_Default; |
| if (property.equals(P_ID_SALARY)) |
| return getSalary() != salary_Default; |
| if (property.equals(P_ID_HAIRCOLOR)) |
| return getHairColor() != hairColor_Default; |
| if (property.equals(P_ID_EYECOLOR)) |
| return getEyeColor() != eyeColor_Default; |
| return false; |
| } |
| |
| /* (non-Javadoc) |
| * Method declared on OrganizationElement |
| */ |
| public boolean isUser() { |
| return true; |
| } |
| |
| /* (non-Javadoc) |
| * Method declared on IPropertySource |
| */ |
| public void resetPropertyValue(Object property) { |
| if (property.equals(P_ID_ADDRESS)) { |
| setAddress(address_Default); |
| return; |
| } |
| if (property.equals(P_ID_FULLNAME)) { |
| setFullName(fullName_Default); |
| return; |
| } |
| if (property.equals(P_ID_PHONENUMBER)) { |
| setPhoneNumber(phoneNumber_Default); |
| return; |
| } |
| if (property.equals(P_ID_EMAIL)) { |
| setEmailAddress(emailAddress_Default); |
| return; |
| } |
| if (property.equals(P_ID_COOP)) { |
| setCoop(coop_Default); |
| } |
| if (property.equals(P_ID_BDAY)) { |
| setBirthday(birthday_Default); |
| return; |
| } |
| if (property.equals(P_ID_SALARY)) { |
| setSalary(salary_Default); |
| return; |
| } |
| if (property.equals(P_ID_HAIRCOLOR)) { |
| setHairColor(hairColor_Default); |
| return; |
| } |
| if (property.equals(P_ID_EYECOLOR)) { |
| setEyeColor(eyeColor_Default); |
| return; |
| } |
| super.resetPropertyValue(property); |
| } |
| |
| /** |
| * Sets the address |
| */ |
| public void setAddress(Address newAddress) { |
| address = newAddress; |
| } |
| |
| /** |
| * Sets the birthday |
| */ |
| public void setBirthday(Birthday newBirthday) { |
| birthday = new Birthday(); |
| } |
| |
| /** |
| * Sets the coop |
| */ |
| public void setCoop(Boolean newCoop) { |
| coop = newCoop; |
| } |
| |
| /** |
| *Sets the email address |
| */ |
| public void setEmailAddress(EmailAddress newEmailAddress) { |
| emailAddress = newEmailAddress; |
| } |
| |
| /** |
| * Sets eye color |
| */ |
| public void setEyeColor(RGB newEyeColor) { |
| eyeColor = newEyeColor; |
| } |
| |
| /** |
| * Sets full name |
| */ |
| public void setFullName(Name newFullName) { |
| fullName = newFullName; |
| } |
| |
| /** |
| * Sets hair color |
| */ |
| public void setHairColor(RGB newHairColor) { |
| hairColor = newHairColor; |
| } |
| |
| /** |
| * Sets phone number |
| */ |
| public void setPhoneNumber(String newPhoneNumber) { |
| phoneNumber = newPhoneNumber; |
| } |
| |
| /** |
| * The <code>OrganizationElement</code> implementation of this |
| * <code>IPropertySource</code> method |
| * defines the following Setable properties |
| * |
| * 1) P_ADDRESS, expects Address |
| * 2) P_FULLNAME, expects Name |
| * 3) P_PHONENUMBER, expects String |
| * 4) P_EMAIL, expects EmailAddress. |
| * 5) P_BOOLEAN, expects Boolean, whether the individual is a coop student or not |
| * 6) P_BDAY, expects Birthday |
| * 7) P_SALARY, expects java.lang.Float |
| * 8) P_HAIRCOLOR, expects RGB |
| * 9) P_EYECOLOR, expects RGB |
| */ |
| public void setPropertyValue(Object propKey, Object val) { |
| // need to convert from String to domain objects |
| if (propKey.equals(P_ID_ADDRESS)) { |
| //setAddress((Address)val); |
| return; |
| } |
| if (propKey.equals(P_ID_FULLNAME)) { |
| setFullName(new Name((String) val)); |
| return; |
| } |
| if (propKey.equals(P_ID_PHONENUMBER)) { |
| setPhoneNumber((String) val); |
| return; |
| } |
| if (propKey.equals(P_ID_EMAIL)) { |
| setEmailAddress(new EmailAddress((String) val)); |
| return; |
| } |
| if (propKey.equals(P_ID_COOP)) { |
| setCoop(((Integer) val).equals(P_VALUE_TRUE) ? Boolean.TRUE |
| : Boolean.FALSE); |
| } |
| if (propKey.equals(P_ID_BDAY)) { |
| //setBirthday((Birthday)val); |
| return; |
| } |
| if (propKey.equals(P_ID_SALARY)) { |
| try { |
| setSalary(new Float(Float.parseFloat((String) val))); |
| } catch (NumberFormatException e) { |
| setSalary(salary_Default); |
| } |
| return; |
| } |
| if (propKey.equals(P_ID_HAIRCOLOR)) { |
| setHairColor((RGB) val); |
| return; |
| } |
| if (propKey.equals(P_ID_EYECOLOR)) { |
| setEyeColor((RGB) val); |
| return; |
| } |
| super.setPropertyValue(propKey, val); |
| } |
| |
| /** |
| * Sets the salary |
| */ |
| void setSalary(Float newSalary) { |
| salary = newSalary; |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.ui.model.IWorkbenchAdapter#getForeground(java.lang.Object) |
| */ |
| public RGB getForeground(Object element) { |
| return null; |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.ui.model.IWorkbenchAdapter#getBackground(java.lang.Object) |
| */ |
| public RGB getBackground(Object element) { |
| return null; |
| } |
| } |