/*
* Copyright � 2016 TIBCO Software,Inc.All rights reserved.
* http://community.jaspersoft.com/project/jaspermobile-android
*
* Unless you have purchased a commercial license agreement from TIBCO Jaspersoft,
* the following license terms apply:
*
* This program is part of TIBCO Jaspersoft Mobile for Android.
*
* TIBCO Jaspersoft Mobile is free software:you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation,either version 3of the License,or
* (at your option)any later version.
*
* TIBCO Jaspersoft Mobile is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY;without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with TIBCO Jaspersoft Mobile for Android.If not,see
* <http://www.gnu.org/licenses/lgpl>.
*/
package com.jaspersoft.android.sdk.client.oxm;
import android.util.Log;
import com.google.gson.annotations.Expose;
import java.util.ArrayList;
import java.util.List;
/**
* This class represents a resource descriptor entity for convenient XML serialization process.
*
* @author Ivan Gadzhega
* @version $Id$
* @since 1.0
*/
public class ResourceDescriptor {
/**
* These constants are copied here from DataType for facility
*/
public static final byte DT_TYPE_TEXT = 1;
public static final byte DT_TYPE_NUMBER = 2;
public static final byte DT_TYPE_DATE = 3;
public static final byte DT_TYPE_DATE_TIME = 4;
/**
* These constants are copied here from InputControl for facility
*/
public static final byte IC_TYPE_BOOLEAN = 1;
public static final byte IC_TYPE_SINGLE_VALUE = 2;
public static final byte IC_TYPE_SINGLE_SELECT_LIST_OF_VALUES = 3;
public static final byte IC_TYPE_SINGLE_SELECT_QUERY = 4;
public static final byte IC_TYPE_MULTI_VALUE = 5;
public static final byte IC_TYPE_MULTI_SELECT_LIST_OF_VALUES = 6;
public static final byte IC_TYPE_MULTI_SELECT_QUERY = 7;
public static final byte IC_TYPE_SINGLE_SELECT_LIST_OF_VALUES_RADIO = 8;
public static final byte IC_TYPE_SINGLE_SELECT_QUERY_RADIO = 9;
public static final byte IC_TYPE_MULTI_SELECT_LIST_OF_VALUES_CHECKBOX = 10;
public static final byte IC_TYPE_MULTI_SELECT_QUERY_CHECKBOX = 11;
public static final String PROP_VERSION = "PROP_VERSION";
public static final String PROP_PARENT_FOLDER = "PROP_PARENT_FOLDER";
public static final String PROP_RESOURCE_TYPE = "PROP_RESOURCE_TYPE";
public static final String PROP_CREATION_DATE = "PROP_CREATION_DATE";
// File resource properties
public static final String PROP_FILERESOURCE_HAS_DATA = "PROP_HAS_DATA";
public static final String PROP_FILERESOURCE_IS_REFERENCE = "PROP_IS_REFERENCE";
public static final String PROP_FILERESOURCE_REFERENCE_URI = "PROP_REFERENCE_URI";
public static final String PROP_FILERESOURCE_WSTYPE = "PROP_WSTYPE";
public static final String PROP_DATA = "PROP_DATA";
public static final String PROP_DATASOURCE_MAPPING = "DATASOURCE_MAPPING";
// Datasource properties
public static final String PROP_DATASOURCE_DRIVER_CLASS = "PROP_DATASOURCE_DRIVER_CLASS";
public static final String PROP_DATASOURCE_CONNECTION_URL = "PROP_DATASOURCE_CONNECTION_URL";
public static final String PROP_DATASOURCE_USERNAME = "PROP_DATASOURCE_USERNAME";
public static final String PROP_DATASOURCE_PASSWORD = "PROP_DATASOURCE_PASSWORD";
public static final String PROP_DATASOURCE_JNDI_NAME = "PROP_DATASOURCE_JNDI_NAME";
public static final String PROP_DATASOURCE_BEAN_NAME = "PROP_DATASOURCE_BEAN_NAME";
public static final String PROP_DATASOURCE_BEAN_METHOD = "PROP_DATASOURCE_BEAN_METHOD";
//
public static final String PROP_DATASOURCE_CUSTOM_SERVICE_CLASS = "PROP_DATASOURCE_CUSTOM_SERVICE_CLASS";
public static final String PROP_DATASOURCE_CUSTOM_PROPERTY_MAP = "PROP_DATASOURCE_CUSTOM_PROPERTY_MAP";
// ReportUnit resource properties
public static final String PROP_RU_DATASOURCE_TYPE = "PROP_RU_DATASOURCE_TYPE";
public static final String PROP_RU_IS_MAIN_REPORT = "PROP_RU_IS_MAIN_REPORT";
public static final String PROP_RU_INPUTCONTROL_RENDERING_VIEW = "PROP_RU_INPUTCONTROL_RENDERING_VIEW";
public static final String PROP_RU_REPORT_RENDERING_VIEW = "PROP_RU_REPORT_RENDERING_VIEW";
public static final String PROP_RU_ALWAYS_PROPMT_CONTROLS = "PROP_RU_ALWAYS_PROPMT_CONTROLS";
public static final String PROP_RU_CONTROLS_LAYOUT = "PROP_RU_CONTROLS_LAYOUT";
public static final byte RU_CONTROLS_LAYOUT_POPUP_SCREEN = 1;
public static final byte RU_CONTROLS_LAYOUT_SEPARATE_PAGE = 2;
public static final byte RU_CONTROLS_LAYOUT_TOP_OF_PAGE = 3;
public static final byte RU_CONTROLS_LAYOUT_IN_PAGE = 4;
// DataType resource properties
public static final String PROP_DATATYPE_STRICT_MAX = "PROP_DATATYPE_STRICT_MAX";
public static final String PROP_DATATYPE_STRICT_MIN = "PROP_DATATYPE_STRICT_MIN";
public static final String PROP_DATATYPE_MIN_VALUE = "PROP_DATATYPE_MIN_VALUE";
public static final String PROP_DATATYPE_MAX_VALUE = "PROP_DATATYPE_MAX_VALUE";
public static final String PROP_DATATYPE_PATTERN = "PROP_DATATYPE_PATTERN";
public static final String PROP_DATATYPE_TYPE = "PROP_DATATYPE_TYPE";
// ListOfValues resource properties
public static final String PROP_LOV = "PROP_LOV";
public static final String PROP_LOV_LABEL = "PROP_LOV_LABEL";
public static final String PROP_LOV_VALUE = "PROP_LOV_VALUE";
// InputControl resource properties
public static final String PROP_INPUTCONTROL_TYPE = "PROP_INPUTCONTROL_TYPE";
public static final String PROP_INPUTCONTROL_IS_MANDATORY = "PROP_INPUTCONTROL_IS_MANDATORY";
public static final String PROP_INPUTCONTROL_IS_READONLY = "PROP_INPUTCONTROL_IS_READONLY";
public static final String PROP_INPUTCONTROL_IS_VISIBLE = "PROP_INPUTCONTROL_IS_VISIBLE";
// SQL resource properties
public static final String PROP_QUERY = "PROP_QUERY";
public static final String PROP_QUERY_VISIBLE_COLUMNS = "PROP_QUERY_VISIBLE_COLUMNS";
public static final String PROP_QUERY_VISIBLE_COLUMN_NAME = "PROP_QUERY_VISIBLE_COLUMN_NAME";
public static final String PROP_QUERY_VALUE_COLUMN = "PROP_QUERY_VALUE_COLUMN";
public static final String PROP_QUERY_LANGUAGE = "PROP_QUERY_LANGUAGE";
// SQL resource properties
public static final String PROP_QUERY_DATA = "PROP_QUERY_DATA";
public static final String PROP_QUERY_DATA_ROW = "PROP_QUERY_DATA_ROW";
public static final String PROP_QUERY_DATA_ROW_COLUMN = "PROP_QUERY_DATA_ROW_COLUMN";
// OLAP XMLA Connection
public static final String PROP_XMLA_URI = "PROP_XMLA_URI";
public static final String PROP_XMLA_CATALOG = "PROP_XMLA_CATALOG";
public static final String PROP_XMLA_DATASOURCE = "PROP_XMLA_DATASOURCE";
public static final String PROP_XMLA_USERNAME = "PROP_XMLA_USERNAME";
public static final String PROP_XMLA_PASSWORD = "PROP_XMLA_PASSWORD";
// OLAP Unit
public static final String PROP_MDX_QUERY = "PROP_MDX_QUERY";
public enum WsType {
accessGrantSchema,
adhocDataView,
adhocReport,
aws,
bean,
contentResource,
css,
custom,
datasource,
dataType,
dashboard,
dashboardState,
domain,
domainTopic,
folder,
font,
img,
inputControl,
jar,
jdbc,
jndi,
jrxml,
lov,
olapMondrianCon,
olapMondrianSchema,
olapUnit,
olapXmlaCon,
prop,
query,
reference,
reportOptions,
reportUnit,
virtual,
xml,
xmlaConnection,
unknow
}
// Convenient TAG for logging purposes
private static final String TAG = "ResourceDescriptor";
@Expose
private String name;
@Expose
private String wsType;
@Expose
private String uriString;
@Expose
private Boolean isNew;
@Expose
private String label;
@Expose
private String description;
@Expose
private String creationDate;
@Expose
private List<ResourceProperty> properties = new ArrayList<ResourceProperty>();
@Expose
private List<ResourceDescriptor> internalResources = new ArrayList<ResourceDescriptor>();
@Expose
private List<ResourceParameter> parameters = new ArrayList<ResourceParameter>();
/**
* Looks the wsType of the resource descriptor and return true
* if it is one of the following: datasource, jdbc, jndi, bean, custom.
* @return <code>true</code> if it is data source, <code>false</code> otherwise.
*/
public boolean isDataSource() {
switch (getWsType()) {
case datasource:
case jdbc:
case jndi:
case bean:
case custom:
return true;
default:
return false;
}
}
/**
* Gets a valid data source resource from a resource descriptor
* @return the data source resource, or <code>null</code> if no data source is found.
*/
public ResourceDescriptor getDataSource() {
for (ResourceDescriptor internalResource : getInternalResources()) {
if (internalResource.isDataSource()) {
return internalResource;
}
}
return null;
}
/**
* Gets a valid data source uri from a resource descriptor
* @return the data source uri, or <code>null</code> if no data source is found.
*/
public String getDataSourceUri() {
for (ResourceDescriptor internalResource : getInternalResources()) {
switch (internalResource.getWsType()) {
case datasource:
return internalResource.getPropertyByName(PROP_FILERESOURCE_REFERENCE_URI).getValue();
case jdbc:
case jndi:
case bean:
case custom:
return internalResource.getUriString();
}
}
// TODO: data source references
return null;
}
/**
* Gets the property with the specified name
* @param name the property name
* @return property with the specified name, or <code>null</code> if the property is not found
*/
public ResourceProperty getPropertyByName(String name) {
for (ResourceProperty property : getProperties()) {
if (name.equals(property.getName())) {
return property;
}
}
return null;
}
/**
* Gets the list of internal resources with the specified type
* @param type the resource type
* @return the list of resources that have the specified type
*/
public List<ResourceDescriptor> getInternalResourcesByType(WsType type) {
List<ResourceDescriptor> resourcesByType = new ArrayList<ResourceDescriptor>();
for(ResourceDescriptor resource : this.getInternalResources()) {
if(this.getWsType() == type) {
resourcesByType.add(resource);
}
}
return resourcesByType;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public WsType getWsType() {
try {
return WsType.valueOf(wsType);
} catch (IllegalArgumentException ex) {
Log.w(TAG, wsType + " is not a constant in WsType enum");
return WsType.unknow;
}
}
public void setWsType(WsType wsType) {
this.wsType = wsType.toString();
}
public String getUriString() {
return uriString;
}
public void setUriString(String uriString) {
this.uriString = uriString;
}
public Boolean getNew() {
return isNew;
}
public void setNew(Boolean aNew) {
isNew = aNew;
}
public String getLabel() {
return label;
}
public void setLabel(String label) {
this.label = label;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getCreationDate() {
return creationDate;
}
public void setCreationDate(String creationDate) {
this.creationDate = creationDate;
}
public List<ResourceProperty> getProperties() {
return properties;
}
public void setProperties(List<ResourceProperty> properties) {
this.properties = properties;
}
public List<ResourceDescriptor> getInternalResources() {
return internalResources;
}
public void setInternalResources(List<ResourceDescriptor> internalResources) {
this.internalResources = internalResources;
}
public List<ResourceParameter> getParameters() {
return parameters;
}
public void setParameters(List<ResourceParameter> parameters) {
this.parameters = parameters;
}
}