Home | History | Annotate | Download | only in editor
      1 /*******************************************************************************
      2  * Copyright (c) 2011 Google, Inc.
      3  * All rights reserved. This program and the accompanying materials
      4  * are made available under the terms of the Eclipse Public License v1.0
      5  * which accompanies this distribution, and is available at
      6  * http://www.eclipse.org/legal/epl-v10.html
      7  *
      8  * Contributors:
      9  *    Google, Inc. - initial API and implementation
     10  *******************************************************************************/
     11 package org.eclipse.wb.internal.core.model.property.editor;
     12 
     13 import com.google.common.base.Joiner;
     14 
     15 import org.eclipse.jface.window.Window;
     16 import org.eclipse.wb.internal.core.DesignerPlugin;
     17 import org.eclipse.wb.internal.core.model.ModelMessages;
     18 import org.eclipse.wb.internal.core.model.property.Property;
     19 import org.eclipse.wb.internal.core.utils.ui.dialogs.StringsDialog;
     20 
     21 /**
     22  * {@link PropertyEditor} for array of {@link String}'s.
     23  *
     24  * @author scheglov_ke
     25  * @coverage core.model.property.editor
     26  */
     27 public final class StringArrayPropertyEditor extends TextDialogPropertyEditor {
     28   ////////////////////////////////////////////////////////////////////////////
     29   //
     30   // Instance
     31   //
     32   ////////////////////////////////////////////////////////////////////////////
     33   public static final PropertyEditor INSTANCE = new StringArrayPropertyEditor();
     34 
     35   private StringArrayPropertyEditor() {
     36   }
     37 
     38   ////////////////////////////////////////////////////////////////////////////
     39   //
     40   // Presentation
     41   //
     42   ////////////////////////////////////////////////////////////////////////////
     43   @Override
     44   protected String getText(Property property) throws Exception {
     45     String[] items = getItems(property);
     46     return "[" + Joiner.on(", ").join(items) + "]";
     47   }
     48 
     49   /**
     50    * @return the items specified in value of given {@link Property}.
     51    */
     52   private static String[] getItems(Property property) throws Exception {
     53     Object value = property.getValue();
     54     if (value instanceof String[]) {
     55       return (String[]) value;
     56     }
     57     // no items
     58     return new String[0];
     59   }
     60 
     61   ////////////////////////////////////////////////////////////////////////////
     62   //
     63   // Editing
     64   //
     65   ////////////////////////////////////////////////////////////////////////////
     66   @Override
     67   protected void openDialog(Property property) throws Exception {
     68     StringsDialog itemsDialog =
     69         new StringsDialog(DesignerPlugin.getShell(),
     70             DesignerPlugin.getDefault(),
     71             property.getTitle(),
     72             ModelMessages.StringArrayPropertyEditor_itemsLabel,
     73             ModelMessages.StringArrayPropertyEditor_hint);
     74     itemsDialog.setItems(getItems(property));
     75     // open dialog
     76     if (itemsDialog.open() == Window.OK) {
     77       property.setValue(itemsDialog.getItems());
     78     }
     79   }
     80 }
     81