/**
* 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;
}
}