Package org.apache.uima.caseditor.ide

Source Code of org.apache.uima.caseditor.ide.TypeSystemLocationPropertyPage

/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements.  See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership.  The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License.  You may obtain a copy of the License at
*
*   http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied.  See the License for the
* specific language governing permissions and limitations
* under the License.
*/

package org.apache.uima.caseditor.ide;

import org.apache.uima.caseditor.CasEditorPlugin;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.QualifiedName;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.dialogs.ElementTreeSelectionDialog;
import org.eclipse.ui.dialogs.PropertyPage;
import org.eclipse.ui.model.WorkbenchContentProvider;
import org.eclipse.ui.model.WorkbenchLabelProvider;

/**
* Type System Property Page to set the default type system location
* of a project.
*/
public class TypeSystemLocationPropertyPage extends PropertyPage {

  public final static String TYPE_SYSTEM_PROPERTY = "UimaCasEditorTypeSystemPath";

  private static final String DEFAULT_TYPE_SYSTEM_PATH = "TypeSystem.xml";

  private Text typeSystemText;

 
  IProject getProject() {
    return (IProject) getElement().getAdapter(IProject.class);
  }
 
  String getDefaultTypeSystemLocation() {
   
    IProject project = getProject();
   
    if (project != null)
        return project.getFile(DEFAULT_TYPE_SYSTEM_PATH).getFullPath().toString();
    else
      return "";
  }
 
  protected Control createContents(Composite parent) {
    Composite composite = new Composite(parent, SWT.NONE);
    GridLayout layout = new GridLayout();
    layout.numColumns = 2;
    composite.setLayout(layout);

    GridData data = new GridData();
    data.verticalAlignment = GridData.FILL;
    data.horizontalAlignment = GridData.FILL;
    composite.setLayoutData(data);

    Label instructions = new Label(composite, SWT.WRAP);
    instructions.setText("Select the default type system which is used to open CASes:");
    GridData gd = new GridData(GridData.FILL_HORIZONTAL);
    gd.horizontalSpan = 2;
    gd.grabExcessHorizontalSpace = true;
    instructions.setLayoutData(gd);

    typeSystemText = new Text(composite,SWT.BORDER);
    gd = new GridData(GridData.FILL_HORIZONTAL);
    typeSystemText.setLayoutData(gd);

    typeSystemText.addModifyListener(new ModifyListener() {
     
      public void modifyText(ModifyEvent event) {
        updateApplyButton();
      }
    });
   
    try {
      String typeSystemPath = ((IResource) getElement()).getPersistentProperty(new QualifiedName("",
              TYPE_SYSTEM_PROPERTY));
      typeSystemText.setText((typeSystemPath != null) ? typeSystemPath : getDefaultTypeSystemLocation());
    } catch (CoreException e) {
      typeSystemText.setText(DEFAULT_TYPE_SYSTEM_PATH);
    }
   
    Button browseButton = new Button(composite, SWT.PUSH);
    browseButton.setText("Browse ...");
    browseButton.addSelectionListener(new SelectionAdapter() {
      public void widgetSelected(SelectionEvent e) {
        ElementTreeSelectionDialog dialog = new ElementTreeSelectionDialog(getShell(),
                new WorkbenchLabelProvider(), new WorkbenchContentProvider());
        dialog.setTitle("Select descriptor");
        dialog.setMessage("Select descriptor");
        dialog.setInput(ResourcesPlugin.getWorkspace().getRoot());
        dialog.setInitialSelection(ResourcesPlugin.getWorkspace().getRoot().
                findMember(typeSystemText.getText()));
        if (dialog.open() == IDialogConstants.OK_ID) {
          IResource resource = (IResource) dialog.getFirstResult();
          if (resource != null) {
            String fileLoc = resource.getFullPath().toString();
            typeSystemText.setText(fileLoc);
          }
        }
      }
    });
   
    return composite;
  }

  protected void performDefaults() {
    typeSystemText.setText(getDefaultTypeSystemLocation());
  }
 
  public boolean performOk() {
   
    // have check, so performOk is only done when ts file is a valid file string
   
    // store the value in the owner text field
    try {
      ((IResource) getElement()).setPersistentProperty(
              new QualifiedName("", TYPE_SYSTEM_PROPERTY), typeSystemText.getText());
    } catch (CoreException e) {
      return false;
    }
    return true;
  }

  /**
   * Retrieves the type system or null if its not set.
   *
   * @param project
   * @return
   */
  public static IFile getTypeSystemLocation(IProject project) {
   
    IFile defaultTypeSystemFile = project.getFile(DEFAULT_TYPE_SYSTEM_PATH);
   
    String typeSystemLocation;
    try {
      typeSystemLocation = project.getPersistentProperty(new QualifiedName("", TYPE_SYSTEM_PROPERTY));
    } catch (CoreException e) {
      typeSystemLocation = null;
    }
   
    IFile typeSystemFile = null;
   
    // Type system location is null when it was never set it anyway,
    if (typeSystemLocation != null) {
     
      if (typeSystemLocation.length() > 0) {
          IResource potentialTypeSystemResource = ResourcesPlugin.getWorkspace().getRoot().findMember(typeSystemLocation);
          if (potentialTypeSystemResource instanceof IFile)
            typeSystemFile = (IFile) potentialTypeSystemResource;
      }
      // Empty string means user does not want a type system to be set
      else {
        return null;
      }
    }
   
    if (typeSystemFile == null) {
      typeSystemFile = defaultTypeSystemFile;
    }
   
    return typeSystemFile;
  }

  public static void setTypeSystemLocation(IProject project, String typeSystemLocation) {
   
    try {
      project.setPersistentProperty(new QualifiedName("", TYPE_SYSTEM_PROPERTY), typeSystemLocation);
    } catch (CoreException e) {
      CasEditorPlugin.log(e);
    }
  }
}
TOP

Related Classes of org.apache.uima.caseditor.ide.TypeSystemLocationPropertyPage

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.