示例#1
0
 /**
  * Returns the names of the types that can be created as the root object.
  * <!-- begin-user-doc -->
  * <!-- end-user-doc -->
  *
  * @generated
  */
 protected Collection<String> getInitialObjectNames() {
   if (initialObjectNames == null) {
     initialObjectNames = new ArrayList<String>();
     for (EClassifier eClassifier : reqif10Package.getEClassifiers()) {
       if (eClassifier instanceof EClass) {
         EClass eClass = (EClass) eClassifier;
         if (!eClass.isAbstract()) {
           initialObjectNames.add(eClass.getName());
         }
       }
     }
     Collections.sort(initialObjectNames, CommonPlugin.INSTANCE.getComparator());
   }
   return initialObjectNames;
 }
示例#2
0
/**
 * This is a simple wizard for creating a new model file.
 * <!-- begin-user-doc -->
 * <!-- end-user-doc -->
 *
 * @generated
 */
public class Reqif10ModelWizard extends Wizard implements INewWizard {
  /**
   * The supported extensions for created files.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   *
   * @generated
   */
  public static final List<String> FILE_EXTENSIONS =
      Collections.unmodifiableList(
          Arrays.asList(
              Reqif10EditorPlugin.INSTANCE
                  .getString("_UI_Reqif10EditorFilenameExtensions")
                  .split("\\s*,\\s*")));

  /**
   * A formatted list of supported file extensions, suitable for display.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   *
   * @generated
   */
  public static final String FORMATTED_FILE_EXTENSIONS =
      Reqif10EditorPlugin.INSTANCE
          .getString("_UI_Reqif10EditorFilenameExtensions")
          .replaceAll("\\s*,\\s*", ", ");

  /**
   * This caches an instance of the model package.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   *
   * @generated
   */
  protected ReqIF10Package reqif10Package = ReqIF10Package.eINSTANCE;

  /**
   * This caches an instance of the model factory.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   *
   * @generated
   */
  protected ReqIF10Factory reqif10Factory = reqif10Package.getReqIF10Factory();

  /**
   * This is the file creation page.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   *
   * @generated
   */
  protected Reqif10ModelWizardNewFileCreationPage newFileCreationPage;

  /**
   * This is the initial object creation page.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   *
   * @generated
   */
  protected Reqif10ModelWizardInitialObjectCreationPage initialObjectCreationPage;

  /**
   * Remember the selection during initialization for populating the default container.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   *
   * @generated
   */
  protected IStructuredSelection selection;

  /**
   * Remember the workbench during initialization.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   *
   * @generated
   */
  protected IWorkbench workbench;

  /**
   * Caches the names of the types that can be created as the root object.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   *
   * @generated
   */
  protected List<String> initialObjectNames;

  /**
   * This just records the information.
   * <!-- begin-user-doc -->
   * Uses a custom Image for the Wizard.
   * <!-- end-user-doc -->
   *
   * @generated NOT
   */
  public void init(IWorkbench workbench, IStructuredSelection selection) {
    this.workbench = workbench;
    this.selection = selection;
    setWindowTitle(Reqif10EditorPlugin.INSTANCE.getString("_UI_Wizard_label"));
    setDefaultPageImageDescriptor(
        ExtendedImageRegistry.INSTANCE.getImageDescriptor(
            Reqif10EditorPlugin.INSTANCE.getImage("full/wizban/NewReqif10.png")));
  }

  /**
   * Returns the names of the types that can be created as the root object.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   *
   * @generated
   */
  protected Collection<String> getInitialObjectNames() {
    if (initialObjectNames == null) {
      initialObjectNames = new ArrayList<String>();
      for (EClassifier eClassifier : reqif10Package.getEClassifiers()) {
        if (eClassifier instanceof EClass) {
          EClass eClass = (EClass) eClassifier;
          if (!eClass.isAbstract()) {
            initialObjectNames.add(eClass.getName());
          }
        }
      }
      Collections.sort(initialObjectNames, CommonPlugin.INSTANCE.getComparator());
    }
    return initialObjectNames;
  }

  /**
   * Create a new model.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   *
   * @generated
   */
  protected EObject createInitialModel() {
    ReqIF root = reqif10Factory.createReqIF();

    ReqIFHeader header = reqif10Factory.createReqIFHeader();
    root.setTheHeader(header);

    XMLGregorianCalendar reqIFLastChange = ReqIF10Util.getReqIFLastChange();

    header.setCreationTime(reqIFLastChange);
    header.setSourceToolId("ProR (http://pror.org)");
    header.setIdentifier("rmf-" + UUID.randomUUID());
    header.setReqIFVersion("1.0.1");
    header.setReqIFToolId("ProR (http://pror.org)");
    header.setComment("Created by: " + System.getProperty("user.name"));

    ReqIFContent content = reqif10Factory.createReqIFContent();
    root.setCoreContent(content);

    // Add a DatatypeDefinition
    DatatypeDefinitionString ddString = reqif10Factory.createDatatypeDefinitionString();
    ddString.setLongName("T_String32k");
    ddString.setMaxLength(new BigInteger("32000"));
    ddString.setLastChange(reqIFLastChange);
    content.getDatatypes().add(ddString);

    // Add a SpecObjectType
    SpecObjectType specObjectType = reqif10Factory.createSpecObjectType();
    specObjectType.setLongName("Requirement Type");
    specObjectType.setLastChange(reqIFLastChange);
    content.getSpecTypes().add(specObjectType);

    // Add an AttributeDefinition
    AttributeDefinitionString ad1 = reqif10Factory.createAttributeDefinitionString();
    ad1.setType(ddString);
    ad1.setLongName("Description");
    ad1.setLastChange(reqIFLastChange);
    specObjectType.getSpecAttributes().add(ad1);

    // Add a SpecificationType
    SpecificationType specificationType = reqif10Factory.createSpecificationType();
    specificationType.setLongName("Specification Type");
    specificationType.setLastChange(reqIFLastChange);
    content.getSpecTypes().add(specificationType);

    // Add an AttributeDefinition
    AttributeDefinitionString ad2 = reqif10Factory.createAttributeDefinitionString();
    ad2.setType(ddString);
    ad2.setLongName("Description");
    ad2.setLastChange(reqIFLastChange);
    specificationType.getSpecAttributes().add(ad2);

    // Add a Specification
    Specification spec = reqif10Factory.createSpecification();
    spec.setLongName("Specification Document");
    spec.setType(specificationType);
    spec.setLastChange(reqIFLastChange);
    AttributeValueString value1 = reqif10Factory.createAttributeValueString();
    value1.setTheValue("Requirements Document");
    value1.setDefinition(ad2);
    spec.getValues().add(value1);

    content.getSpecifications().add(spec);

    // Configure the Specification View
    ProrToolExtension extension = ConfigurationFactory.eINSTANCE.createProrToolExtension();
    ReqIFToolExtensionUtil.addToolExtension(root, extension);
    ProrSpecViewConfiguration prorSpecViewConfiguration =
        ConfigurationFactory.eINSTANCE.createProrSpecViewConfiguration();
    extension.getSpecViewConfigurations().add(prorSpecViewConfiguration);
    prorSpecViewConfiguration.setSpecification(spec);
    Column col = ConfigurationFactory.eINSTANCE.createColumn();
    col.setLabel("Description");
    col.setWidth(400);
    prorSpecViewConfiguration.getColumns().add(col);

    Column leftHeaderColumn = ConfigurationFactory.eINSTANCE.createColumn();
    leftHeaderColumn.setWidth(ConfigurationUtil.DEFAULT_LEFT_HEADER_COLUMN_WIDTH);
    leftHeaderColumn.setLabel(ConfigurationUtil.DEFAULT_LEFT_HEADER_COLUMN_NAME);
    prorSpecViewConfiguration.setLeftHeaderColumn(leftHeaderColumn);

    // Configure the Label configuration
    ProrGeneralConfiguration generalConfig =
        ConfigurationFactory.eINSTANCE.createProrGeneralConfiguration();
    LabelConfiguration labelConfig = ConfigurationFactory.eINSTANCE.createLabelConfiguration();
    labelConfig.getDefaultLabel().add("Description");
    generalConfig.setLabelConfiguration(labelConfig);
    extension.setGeneralConfiguration(generalConfig);

    // Create one Requirement
    SpecObject specObject = reqif10Factory.createSpecObject();
    specObject.setType(specObjectType);
    specObject.setLastChange(reqIFLastChange);
    content.getSpecObjects().add(specObject);
    AttributeValueString value2 = reqif10Factory.createAttributeValueString();
    value2.setTheValue("Start editing here.");
    value2.setDefinition(ad1);
    specObject.getValues().add(value2);

    // Add the requirement to the Specification
    SpecHierarchy specHierarchy = reqif10Factory.createSpecHierarchy();
    specHierarchy.setLastChange(reqIFLastChange);
    spec.getChildren().add(specHierarchy);
    specHierarchy.setObject(specObject);
    return root;
  }

  /**
   * Do the work after everything is specified.
   * <!-- begin-user-doc -->
   * Always use UTF-8 Encoding
   * <!-- end-user-doc -->
   *
   * @generated NOT
   */
  @Override
  public boolean performFinish() {
    try {
      // Remember the file.
      //
      final IFile modelFile = getModelFile();

      // Do the work within an operation.
      //
      WorkspaceModifyOperation operation =
          new WorkspaceModifyOperation() {
            @Override
            protected void execute(IProgressMonitor progressMonitor) {
              try {
                // Create a resource set
                //
                ReqIFResourceSetImpl resourceSet = new ReqIFResourceSetImpl();

                // (mj) Sollte nicht notwendig sein, übernommmen von Mark's Unit Test
                resourceSet
                    .getResourceFactoryRegistry()
                    .getExtensionToFactoryMap()
                    .put("reqif", new ReqIFResourceFactoryImpl());
                resourceSet
                    .getPackageRegistry()
                    .put(ReqIF10Package.eNS_URI, ReqIF10Package.eINSTANCE);

                // Get the URI of the model file.
                //
                URI fileURI =
                    URI.createPlatformResourceURI(modelFile.getFullPath().toString(), true);

                // Create a resource for this file.
                //
                Resource resource = resourceSet.createResource(fileURI);

                // Add the initial model object to the contents.
                //
                EObject rootObject = createInitialModel();
                if (rootObject != null) {
                  resource.getContents().add(rootObject);
                }

                // Save the contents of the resource to the file system.
                //
                Map<Object, Object> options = new HashMap<Object, Object>();
                // Always use UTF-8 encoding
                // options.put(XMLResource.OPTION_ENCODING,
                // initialObjectCreationPage.getEncoding());
                options.put(XMLResource.OPTION_ENCODING, "UTF-8");
                resource.save(null);
              } catch (Exception exception) {
                Reqif10EditorPlugin.INSTANCE.log(exception);
              } finally {
                progressMonitor.done();
              }
            }
          };

      getContainer().run(false, false, operation);

      // Select the new file resource in the current view.
      //
      IWorkbenchWindow workbenchWindow = workbench.getActiveWorkbenchWindow();
      IWorkbenchPage page = workbenchWindow.getActivePage();
      final IWorkbenchPart activePart = page.getActivePart();
      if (activePart instanceof ISetSelectionTarget) {
        final ISelection targetSelection = new StructuredSelection(modelFile);
        getShell()
            .getDisplay()
            .asyncExec(
                new Runnable() {
                  public void run() {
                    ((ISetSelectionTarget) activePart).selectReveal(targetSelection);
                  }
                });
      }

      // Open an editor on the new file.
      //
      try {
        page.openEditor(
            new FileEditorInput(modelFile),
            workbench
                .getEditorRegistry()
                .getDefaultEditor(modelFile.getFullPath().toString())
                .getId());
      } catch (PartInitException exception) {
        MessageDialog.openError(
            workbenchWindow.getShell(),
            Reqif10EditorPlugin.INSTANCE.getString("_UI_OpenEditorError_label"),
            exception.getMessage());
        return false;
      }

      return true;
    } catch (Exception exception) {
      Reqif10EditorPlugin.INSTANCE.log(exception);
      return false;
    }
  }

  /**
   * This is the one page of the wizard.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   *
   * @generated
   */
  public class Reqif10ModelWizardNewFileCreationPage extends WizardNewFileCreationPage {
    /**
     * Pass in the selection.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     *
     * @generated
     */
    public Reqif10ModelWizardNewFileCreationPage(String pageId, IStructuredSelection selection) {
      super(pageId, selection);
    }

    /**
     * The framework calls this to see if the file is correct.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     *
     * @generated
     */
    @Override
    protected boolean validatePage() {
      if (super.validatePage()) {
        String extension = new Path(getFileName()).getFileExtension();
        if (extension == null || !FILE_EXTENSIONS.contains(extension)) {
          String key =
              FILE_EXTENSIONS.size() > 1 ? "_WARN_FilenameExtensions" : "_WARN_FilenameExtension";
          setErrorMessage(
              Reqif10EditorPlugin.INSTANCE.getString(
                  key, new Object[] {FORMATTED_FILE_EXTENSIONS}));
          return false;
        }
        return true;
      }
      return false;
    }

    /**
     *
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     *
     * @generated
     */
    public IFile getModelFile() {
      return ResourcesPlugin.getWorkspace()
          .getRoot()
          .getFile(getContainerFullPath().append(getFileName()));
    }
  }

  /**
   * This is the page where the type of object to create is selected.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   *
   * @generated
   */
  public class Reqif10ModelWizardInitialObjectCreationPage extends WizardPage {
    /**
     *
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     *
     * @generated
     */
    protected Combo initialObjectField;

    /**
     * @generated
     *     <!-- begin-user-doc -->
     *     <!-- end-user-doc -->
     */
    protected List<String> encodings;

    /**
     *
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     *
     * @generated
     */
    protected Combo encodingField;

    /**
     * Pass in the selection.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     *
     * @generated
     */
    public Reqif10ModelWizardInitialObjectCreationPage(String pageId) {
      super(pageId);
    }

    /**
     *
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     *
     * @generated
     */
    public void createControl(Composite parent) {
      Composite composite = new Composite(parent, SWT.NONE);
      {
        GridLayout layout = new GridLayout();
        layout.numColumns = 1;
        layout.verticalSpacing = 12;
        composite.setLayout(layout);

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

      Label containerLabel = new Label(composite, SWT.LEFT);
      {
        containerLabel.setText(Reqif10EditorPlugin.INSTANCE.getString("_UI_ModelObject"));

        GridData data = new GridData();
        data.horizontalAlignment = GridData.FILL;
        containerLabel.setLayoutData(data);
      }

      initialObjectField = new Combo(composite, SWT.BORDER);
      {
        GridData data = new GridData();
        data.horizontalAlignment = GridData.FILL;
        data.grabExcessHorizontalSpace = true;
        initialObjectField.setLayoutData(data);
      }

      for (String objectName : getInitialObjectNames()) {
        initialObjectField.add(getLabel(objectName));
      }

      if (initialObjectField.getItemCount() == 1) {
        initialObjectField.select(0);
      }
      initialObjectField.addModifyListener(validator);

      Label encodingLabel = new Label(composite, SWT.LEFT);
      {
        encodingLabel.setText(Reqif10EditorPlugin.INSTANCE.getString("_UI_XMLEncoding"));

        GridData data = new GridData();
        data.horizontalAlignment = GridData.FILL;
        encodingLabel.setLayoutData(data);
      }
      encodingField = new Combo(composite, SWT.BORDER);
      {
        GridData data = new GridData();
        data.horizontalAlignment = GridData.FILL;
        data.grabExcessHorizontalSpace = true;
        encodingField.setLayoutData(data);
      }

      for (String encoding : getEncodings()) {
        encodingField.add(encoding);
      }

      encodingField.select(0);
      encodingField.addModifyListener(validator);

      setPageComplete(validatePage());
      setControl(composite);
    }

    /**
     *
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     *
     * @generated
     */
    protected ModifyListener validator =
        new ModifyListener() {
          public void modifyText(ModifyEvent e) {
            setPageComplete(validatePage());
          }
        };

    /**
     *
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     *
     * @generated
     */
    protected boolean validatePage() {
      return getInitialObjectName() != null && getEncodings().contains(encodingField.getText());
    }

    /**
     *
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     *
     * @generated
     */
    @Override
    public void setVisible(boolean visible) {
      super.setVisible(visible);
      if (visible) {
        if (initialObjectField.getItemCount() == 1) {
          initialObjectField.clearSelection();
          encodingField.setFocus();
        } else {
          encodingField.clearSelection();
          initialObjectField.setFocus();
        }
      }
    }

    /**
     *
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     *
     * @generated
     */
    public String getInitialObjectName() {
      String label = initialObjectField.getText();

      for (String name : getInitialObjectNames()) {
        if (getLabel(name).equals(label)) {
          return name;
        }
      }
      return null;
    }

    /**
     *
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     *
     * @generated
     */
    public String getEncoding() {
      return encodingField.getText();
    }

    /**
     * Returns the label for the specified type name.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     *
     * @generated
     */
    protected String getLabel(String typeName) {
      try {
        return Reqif10EditPlugin.INSTANCE.getString("_UI_" + typeName + "_type");
      } catch (MissingResourceException mre) {
        Reqif10EditorPlugin.INSTANCE.log(mre);
      }
      return typeName;
    }

    /**
     *
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     *
     * @generated
     */
    protected Collection<String> getEncodings() {
      if (encodings == null) {
        encodings = new ArrayList<String>();
        for (StringTokenizer stringTokenizer =
                new StringTokenizer(
                    Reqif10EditorPlugin.INSTANCE.getString("_UI_XMLEncodingChoices"));
            stringTokenizer.hasMoreTokens(); ) {
          encodings.add(stringTokenizer.nextToken());
        }
      }
      return encodings;
    }
  }

  /**
   * The framework calls this to create the contents of the wizard.
   * <!-- begin-user-doc -->
   * We always use a {@link ReqIf} as the root.
   * <!-- end-user-doc -->
   *
   * @generated NOT
   */
  @Override
  public void addPages() {
    // Create a page, set the title, and the initial model file name.
    //
    newFileCreationPage = new Reqif10ModelWizardNewFileCreationPage("Whatever", selection);
    newFileCreationPage.setTitle(
        Reqif10EditorPlugin.INSTANCE.getString("_UI_Reqif10ModelWizard_label"));
    newFileCreationPage.setDescription(
        Reqif10EditorPlugin.INSTANCE.getString("_UI_Reqif10ModelWizard_description"));
    newFileCreationPage.setFileName(
        Reqif10EditorPlugin.INSTANCE.getString("_UI_Reqif10EditorFilenameDefaultBase")
            + "."
            + FILE_EXTENSIONS.get(0));
    addPage(newFileCreationPage);

    // Try and get the resource selection to determine a current directory for the file dialog.
    //
    if (selection != null && !selection.isEmpty()) {
      // Get the resource...
      //
      Object selectedElement = selection.iterator().next();
      if (selectedElement instanceof IResource) {
        // Get the resource parent, if its a file.
        //
        IResource selectedResource = (IResource) selectedElement;
        if (selectedResource.getType() == IResource.FILE) {
          selectedResource = selectedResource.getParent();
        }

        // This gives us a directory...
        //
        if (selectedResource instanceof IFolder || selectedResource instanceof IProject) {
          // Set this for the container.
          //
          newFileCreationPage.setContainerFullPath(selectedResource.getFullPath());

          // Make up a unique new name here.
          //
          String defaultModelBaseFilename =
              Reqif10EditorPlugin.INSTANCE.getString("_UI_Reqif10EditorFilenameDefaultBase");
          String defaultModelFilenameExtension = FILE_EXTENSIONS.get(0);
          String modelFilename = defaultModelBaseFilename + "." + defaultModelFilenameExtension;
          for (int i = 1; ((IContainer) selectedResource).findMember(modelFilename) != null; ++i) {
            modelFilename = defaultModelBaseFilename + i + "." + defaultModelFilenameExtension;
          }
          newFileCreationPage.setFileName(modelFilename);
        }
      }
    }
  }

  /**
   * Get the file from the page.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   *
   * @generated
   */
  public IFile getModelFile() {
    return newFileCreationPage.getModelFile();
  }
}