/** * 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.ambari.server.view.configuration; import java.util.Collections; import java.util.List; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlElementWrapper; import javax.xml.bind.annotation.XmlRootElement; import org.apache.ambari.server.view.DefaultMasker; import org.apache.ambari.view.Masker; import org.apache.ambari.view.View; import org.apache.ambari.view.migration.ViewDataMigrator; import org.apache.ambari.view.validation.Validator; import org.apache.commons.lang.StringUtils; /** * View configuration. */ @XmlRootElement(name="view") @XmlAccessorType(XmlAccessType.FIELD) public class ViewConfig { /** * The unique view name. */ private String name; /** * The public view name. */ private String label; /** * The view description. */ private String description; /** * The view version. */ private String version; /** * The view version. */ private String build; /** * The minimum Ambari version. */ @XmlElement(name="min-ambari-version") private String minAmbariVersion; /** * The maximum Ambari version. */ @XmlElement(name="max-ambari-version") private String maxAmbariVersion; /** * The icon path in the view archive. */ private String icon; /** * The big icon path in the view archive. */ private String icon64; /** * Indicates whether or not this is a system view. */ private boolean system; /** * The list of extra classpath elements. */ @XmlElementWrapper @XmlElement(name="path") private List<String> classpath; /** * The main view class name. */ @XmlElement(name="view-class") private String view; /** * The view class. */ private Class<? extends View> viewClass = null; /** * The main view class name. */ @XmlElement(name="data-migrator-class") private String dataMigrator; /** * The main view class name. */ @XmlElement(name="data-version") private String dataVersion; /** * Enable views to display cluster options in case of no cluster config properties. */ @XmlElement(name="cluster-config-options") private String clusterConfigOptions; /** * The view class. */ private Class<? extends ViewDataMigrator> dataMigratorClass = null; /** * The main view class name. */ @XmlElement(name="validator-class") private String validator; /** * The view validator class. */ private Class<? extends Validator> validatorClass = null; /** * The masker class name for parameters. */ @XmlElement(name="masker-class") private String masker; /** * The mask class. */ private Class<? extends Masker> maskerClass = null; /** * The list of view parameters. */ @XmlElement(name="parameter") private List<ParameterConfig> parameters; /** * The list of view resources. */ @XmlElement(name="resource") private List<ResourceConfig> resources; /** * The view instance auto create configuration. */ @XmlElement(name="auto-instance") private AutoInstanceConfig autoInstance; /** * The list of view instances. */ @XmlElement(name="instance") private List<InstanceConfig> instances; /** * The view persistence configuration. */ @XmlElement(name="persistence") private PersistenceConfig persistence; /** * The list of view parameters. */ @XmlElement(name="permission") private List<PermissionConfig> permissions; /** * Get the unique name. * * @return the view name */ public String getName() { return name; } /** * Get the public view name. * * @return the view label */ public String getLabel() { return label; } /** * Get the view description. * * @return the view description */ public String getDescription() { return description; } /** * Get the view version. * * @return the version */ public String getVersion() { return version; } /** * Get the view build number. * * @return the build number */ public String getBuild() { return build; } /** * Get the minimum version of Ambari required to run this view. * * @return the minimum Ambari version */ public String getMinAmbariVersion() { return minAmbariVersion; } /** * Get the maximum version of Ambari that can run this view. * * @return the maximum Ambari version */ public String getMaxAmbariVersion() { return maxAmbariVersion; } /** * Get the icon path in the view archive. * * @return the icon path */ public String getIcon() { return icon; } /** * Get the big icon path in the view archive. * * @return the big icon path */ public String getIcon64() { return icon64; } /** * Determine whether or not this is a system view. * * @return true if this is a system view */ public boolean isSystem() { return system; } /** * Get the extra classpath as a comma separated path of filenames or URLs pointing to * directories or jar files. * * @return the extra classpath */ public String getExtraClasspath() { return classpath == null ? null : StringUtils.join(classpath, ","); } /** * Get the view class name. * * @return the view class name */ public String getView() { return view; } /** * Get the view class. * * @param cl the class loader * * @return the view class * * @throws ClassNotFoundException if the class can not be loaded */ public Class<? extends View> getViewClass(ClassLoader cl) throws ClassNotFoundException { if (viewClass == null) { viewClass = cl.loadClass(view).asSubclass(View.class); } return viewClass; } /** * Get the view class name. * * @return the view class name */ public String getDataMigrator() { return dataMigrator; } /** * Get the view class. * * @param cl the class loader * * @return the view class * * @throws ClassNotFoundException if the class can not be loaded */ public Class<? extends ViewDataMigrator> getDataMigratorClass(ClassLoader cl) throws ClassNotFoundException { if (dataMigratorClass == null) { dataMigratorClass = cl.loadClass(dataMigrator).asSubclass(ViewDataMigrator.class); } return dataMigratorClass; } /** * Get the view data version. If not specified, data version is 0. * * @return the data version */ public int getDataVersion() { return (dataVersion == null) ? 0 : Integer.valueOf(dataVersion); } /** * Get the view validator class name. * * @return the view validator class name */ public String getValidator() { return validator; } /** * Get the view validator class. * * @param cl the class loader * * @return the view validator class * * @throws ClassNotFoundException if the class can not be loaded */ public Class<? extends Validator> getValidatorClass(ClassLoader cl) throws ClassNotFoundException { if (validatorClass == null) { validatorClass = cl.loadClass(validator).asSubclass(Validator.class); } return validatorClass; } /** * Get the masker class name. * @return the masker class name */ public String getMasker() { return masker; } /** * Get the masker class. * * @param cl the class loader * * @return the masker class * * @throws ClassNotFoundException if the class can not be loaded */ public Class<? extends Masker> getMaskerClass(ClassLoader cl) throws ClassNotFoundException { if (maskerClass == null) { if (StringUtils.isBlank(masker)) { maskerClass = DefaultMasker.class; } else { maskerClass = cl.loadClass(masker).asSubclass(Masker.class); } } return maskerClass; } /** * Get the list of view parameters. * * @return the list of parameters */ public List<ParameterConfig> getParameters() { return parameters == null ? Collections.<ParameterConfig>emptyList() : parameters; } /** * Get the list of view resources. * * @return return the list of resources */ public List<ResourceConfig> getResources() { return resources == null ? Collections.<ResourceConfig>emptyList() : resources; } /** * Get the configuration for the view instance auto create. * * @return the view instance auto create; null if no auto instance is specified */ public AutoInstanceConfig getAutoInstance() { return autoInstance; } /** * Get the list of view instances. * * @return the list of view instances */ public List<InstanceConfig> getInstances() { return instances == null ? Collections.<InstanceConfig>emptyList() : instances; } /** * Get the view persistence configuration. * * @return the view persistence configuration */ public PersistenceConfig getPersistence() { return persistence; } /** * Get the list of custom permissions defined for the view. * * @return the list of custom permissions */ public List<PermissionConfig> getPermissions() { return permissions == null ? Collections.<PermissionConfig>emptyList() : permissions; } /** * Enables views to display cluster options in case of no cluster config properties * * @return clusterConfigOptions */ public String getClusterConfigOptions() { return clusterConfigOptions; } }