Package org.acme.example.component

Source Code of org.acme.example.component.ExampleComponentProvider

/*******************************************************************************
* Mission Control Technologies, Copyright (c) 2009-2012, United States Government
* as represented by the Administrator of the National Aeronautics and Space
* Administration. All rights reserved.
*
* The MCT platform is licensed 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.
*
* MCT includes source code licensed under additional open source licenses. See
* the MCT Open Source Licenses file included with this distribution or the About
* MCT Licenses dialog available at runtime from the MCT Help menu for additional
* information.
*******************************************************************************/
package org.acme.example.component;

import gov.nasa.arc.mct.gui.MenuItemInfo;
import gov.nasa.arc.mct.gui.MenuItemInfo.MenuItemType;
import gov.nasa.arc.mct.policy.PolicyInfo;
import gov.nasa.arc.mct.services.component.AbstractComponentProvider;
import gov.nasa.arc.mct.services.component.ComponentTypeInfo;
import gov.nasa.arc.mct.services.component.TypeInfo;
import gov.nasa.arc.mct.services.component.ViewInfo;
import gov.nasa.arc.mct.services.component.ViewType;

import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.ResourceBundle;

import javax.swing.ImageIcon;

import org.acme.example.actions.APICreationAction;
import org.acme.example.actions.AboutExampleAction;
import org.acme.example.actions.AddOrRemoveNodeBorderAction;
import org.acme.example.actions.BeepAction;
import org.acme.example.actions.SubmenuMenu;
import org.acme.example.policy.FilterViewPolicy;
import org.acme.example.telemetry.TelemetryComponent;
import org.acme.example.view.CenterPanePanel;
import org.acme.example.view.PrivateInfoView;
import org.acme.example.view.PublicInfoView;
import org.acme.example.view.SaveModelStateView;
import org.acme.example.view.ShowChildrenInTableView;

/**
* The <code>ExampleComponentProvider</code> class exposes the <code>ExampleComponent</code> to MCT.
*/
public class ExampleComponentProvider extends AbstractComponentProvider {

  // use a resource bundle for strings to enable localization in the future if required
  private static ResourceBundle bundle = ResourceBundle.getBundle("ExampleResourceBundle");
 
  private final ComponentTypeInfo exampleComponentType;
  private final ComponentTypeInfo telemetryComponentType;
   
  private static final ImageIcon ICON =
      new ImageIcon(ExampleComponentProvider.class.getResource("/icons/mct_icon_telemetry.png"));
 
  public ExampleComponentProvider() {
    // this is the component type we are providing. The display name and description are used
    // by the MCT menu system for creating new instances and thus should be human readable
    // and descriptive
    exampleComponentType = new ComponentTypeInfo(
        bundle.getString("display_name")
        bundle.getString("description"),
        ExampleComponent.class);
    telemetryComponentType = new ComponentTypeInfo(
        bundle.getString("telemetry_display_name")
        bundle.getString("telemetry_description"),
        TelemetryComponent.class,
        true);
  }

 
  @Override
  public Collection<ComponentTypeInfo> getComponentTypes() {
    // return the component types provided
    return Arrays.asList(exampleComponentType, telemetryComponentType);
  }

  @Override
  public Collection<ViewInfo> getViews(String componentTypeId) {

    // return a view if desired for the components being created. Note that this method is called
    // for every component type so a view could be supplied for any component type not just
    // components supplied by this provider.
   
    // Also, note that the default node view, canvas view, and housing view will be supplied
    // by the MCT platform.
    if (componentTypeId.equals(ExampleComponent.class.getName())) {
      return Arrays.asList(
          new ViewInfo(CenterPanePanel.class, bundle.getString("CenterPaneViewName"), ViewType.CENTER),
          new ViewInfo(CenterPanePanel.class, bundle.getString("CenterPaneViewName"), ViewType.OBJECT),
          new ViewInfo(PublicInfoView.class, bundle.getString("PublicViewName"), ViewType.OBJECT),
          new ViewInfo(PrivateInfoView.class, bundle.getString("PrivateViewName"), ViewType.OBJECT),
          new ViewInfo(SaveModelStateView.class, bundle.getString("SaveModelStateViewName"), ViewType.OBJECT),
          new ViewInfo(ShowChildrenInTableView.class, bundle.getString("ShowChildrenInTableViewName"), ViewType.OBJECT)
         
      );
    }
    return Collections.emptyList();
  }
 
  @Override
  public Collection<MenuItemInfo> getMenuItemInfos() {
    return Arrays.asList(
        // Additional menu items can be added to the following
        // menus with the corresponding menubarPaths:
        // This    => /this/additions
        // Objects => /objects/additions
        // Help    => /help/additions
       
        // add menu items to help -- this will show up as a help topic for the example plugin
        new MenuItemInfo(
            "/help/additions", // NOI18N
            "ABOUT_EXAMPLE_ACTION", //NO18N
            MenuItemType.NORMAL,
            AboutExampleAction.class),
        // add menu item to the objects menu -- this will demonstrate programmatic creation for ExampleComponents
        new MenuItemInfo(
                "/objects/additions", // NOI18N
                "API_CREATION_ACTION", //NO18N
                MenuItemType.NORMAL,
                APICreationAction.class),
        // add menu item to the objects menu -- this will be inline as a radio button group under the objects menu
        new MenuItemInfo(
            "/objects/additions", //NOI18N
            "CHANGE_COLOR_ACTION", //NOI18N
            MenuItemType.RADIO_GROUP,
            AddOrRemoveNodeBorderAction.class),
        new MenuItemInfo(
            "/objects/additions", //NOI18N
            "SUBMENU", //NOI18N
            SubmenuMenu.class),
        new MenuItemInfo(
            "objects/submenu.ext", //NOI18N
            "OBJECTS_SUBMENU_BEEP", //NOI18N
            MenuItemType.NORMAL,
            BeepAction.class));
  }

 
  @Override
  public Collection<PolicyInfo> getPolicyInfos() {
    /*
     * Here is an example of registering a policy to a platform provided
     * policy category. Platform-provided policy categories are defined
     * in PolicyInfo.CatetoryType, which is an enum.
     * A new category can also be added by passing in a unique String to
     * the category name in PolicyInfo constructor.
     */
    return Collections.singletonList(
        new PolicyInfo(PolicyInfo.CategoryType.FILTER_VIEW_ROLE.getKey(),
                 FilterViewPolicy.class));
   
    /*
     * External plugins can execute a policy category by accessing the
     * PolicyManager, which is available as an OSGi service.
     *
     * To access the PolicyManager, a class PolicyManagerAccess should be created.
     * This class is used to inject an instance of the PolicyManager using declarative
     * services (see OSGI-INF/component.xml for examples for ComponentRegistryAccess).
     *
     * The following code snippet shows how to execute a policy category:
     *
     *   PolicyManager policyManager = PolicyManagerAccess.getPolicyManager();
     *   PolicyContext context = new PolicyContext();
     *   context.setProperty(String key, Object value);
     *   ...
     *   ... maybe more properties to be set
     *   ...
     *   ExecutionResult result =
     *     policyManager.execute(String categoryKey, PolicyContext context);
     */
  }
 

    @Override
    public <T> T getAsset(TypeInfo<?> typeInfo, Class<T> assetClass) {
      /*
       * Relevant "assets" associated with certain types should
       * be delivered here. Examples of assets include ImageIcons and
       * CreateWizardUI objects.
       *
       * Typically, it is desirable to provide any needed "assets"
       * here for the ComponentTypeInfos and ViewInfos that are
       * exposed in the same ComponentProvider. (In principle,
       * however, this could be used as a way to introduce assets
       * for types defined in a totally different plug-in.)
       */
        if (assetClass.isAssignableFrom(ImageIcon.class)) {
            if (typeInfo.getTypeClass().equals(TelemetryComponent.class)) {
                return assetClass.cast(ICON);
            }
        }
        return super.getAsset(typeInfo, assetClass);
    }
}
TOP

Related Classes of org.acme.example.component.ExampleComponentProvider

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.