Java tutorial
/** * Global Sensor Networks (GSN) Source Code * Copyright (c) 2006-2014, Ecole Polytechnique Federale de Lausanne (EPFL) * * This file is part of GSN. * * GSN is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSN 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSN. If not, see <http://www.gnu.org/licenses/>. * * File: src/gsn/beans/VSensorConfig.java * * @author Jerome Rousselot * @author Mehdi Riahi * @author gsn_devs * @author Ali Salehi * @author Timotee Maret * */ package gsn.beans; import gsn.Main; import gsn.utils.CaseInsensitiveComparator; import gsn.utils.Pair; import gsn.utils.Utils; import java.io.Serializable; import java.text.SimpleDateFormat; import java.util.*; import org.apache.commons.collections.KeyValue; import org.slf4j.LoggerFactory; import org.slf4j.Logger; public class VSensorConfig implements Serializable { private static final long serialVersionUID = 1625382440863797197L; public static final int DEFAULT_PRIORITY = 100; public static final int NO_FIXED_RATE = 0; public static final int DEFAULT_POOL_SIZE = 10; private String name; private int priority = DEFAULT_PRIORITY; private String mainClass; private String description; @Deprecated private int lifeCyclePoolSize = DEFAULT_POOL_SIZE; private int outputStreamRate; private KeyValue[] addressing; private DataField[] outputStructure; private String webParameterPassword = null; private String storageHistorySize = null; private final HashMap<String, InputStream> inputStreamNameToInputStreamObjectMapping = new HashMap<String, InputStream>(); private InputStream inputStreams[]; private ArrayList<KeyValue> mainClassInitialParams = new ArrayList<KeyValue>(); private transient Long lastModified; private String fileName; private StorageConfig storage; private String timeZone; private SimpleDateFormat sdf = null; private transient final Logger logger = LoggerFactory.getLogger(VSensorConfig.class); private String directoryQuery; private WebInput[] webinput; private String sensorMap = "false"; private String access_protected = "false"; /** * @return Returns the addressing. */ public KeyValue[] getAddressing() { return this.addressing; } public String[][] getRPCFriendlyAddressing() { String[][] toReturn = new String[this.addressing.length][2]; for (int i = 0; i < toReturn.length; i++) for (KeyValue val : this.addressing) { toReturn[i][0] = (String) val.getKey(); toReturn[i][1] = (String) val.getValue(); } return toReturn; } public String[][] getRPCFriendlyOutputStructure() { String[][] toReturn = new String[this.outputStructure.length][2]; for (int i = 0; i < outputStructure.length; i++) { toReturn[i][0] = (String) outputStructure[i].getName(); toReturn[i][1] = (String) outputStructure[i].getType(); } return toReturn; } /** * @return Returns the description. */ public String getDescription() { return this.description; } /** * @return Returns the inputStreams. */ public Collection<InputStream> getInputStreams() { return this.inputStreamNameToInputStreamObjectMapping.values(); } public InputStream getInputStream(final String inputStreamName) { return this.inputStreamNameToInputStreamObjectMapping.get(inputStreamName); } /** * @Deprecated * @return Returns the lifeCyclePoolSize. */ public int getLifeCyclePoolSize() { return this.lifeCyclePoolSize; } /** * @return Returns the mainClass. */ public String getProcessingClass() { if (this.mainClass == null) this.mainClass = "gsn.vsensor.BridgeVirtualSensor"; return this.mainClass; } /** * The <code>nameInitialized</code> is used to cache the virtual sensor's * name for preformance. */ private boolean nameInitialized = false; public String getName() { if (this.nameInitialized == false) { this.name = this.name.replace(" ", "").trim().toLowerCase(); this.nameInitialized = true; } return this.name; } /** * @return Returns the outputStreamRate. */ public int getOutputStreamRate() { return this.outputStreamRate; } /** * @return Returns the outputStructure. */ public DataField[] getOutputStructure() { return this.outputStructure; } /** * @return Returns the priority. */ public int getPriority() { return this.priority; } public Long getLastModified() { return this.lastModified; } /** * @param addressing The addressing to set. */ public void setAddressing(KeyValue[] addressing) { this.addressing = addressing; } /** * @param description The description to set. */ public void setDescription(final String description) { this.description = description; } /** * @param lastModified The lastModified to set. */ public void setLastModified(final Long lastModified) { this.lastModified = lastModified; } /** * @Deprecated * @param lifeCyclePoolSize The lifeCyclePoolSize to set. */ public void setLifeCyclePoolSize(final int lifeCyclePoolSize) { this.lifeCyclePoolSize = lifeCyclePoolSize; } /** * @param mainClass The mainClass to set. */ public void setMainClass(final String mainClass) { this.mainClass = mainClass; } /** * @param virtualSensorName The name to set. */ public void setName(final String virtualSensorName) { this.name = virtualSensorName; } /** * @param outputStreamRate The outputStreamRate to set. */ public void setOutputStreamRate(final int outputStreamRate) { this.outputStreamRate = outputStreamRate; } /** * @param outputStructure The outputStructure to set. */ public void setOutputStructure(DataField[] outputStructure) { this.outputStructure = outputStructure; } /** * @param priority The priority to set. */ public void setPriority(final int priority) { this.priority = priority; } public String[] getAddressingKeys() { final String result[] = new String[this.getAddressing().length]; int counter = 0; for (final KeyValue predicate : this.getAddressing()) result[counter++] = (String) predicate.getKey(); return result; } public String[] getAddressingValues() { final String result[] = new String[this.getAddressing().length]; int counter = 0; for (final KeyValue predicate : this.getAddressing()) result[counter++] = (String) predicate.getValue(); return result; } private boolean isGetMainClassInitParamsInitialized = false; private final TreeMap<String, String> mainClassInitParams = new TreeMap<String, String>( new CaseInsensitiveComparator()); /** * Note that the key and value both are trimmed before being inserted into * the data strcture. * * @return */ public TreeMap<String, String> getMainClassInitialParams() { if (!this.isGetMainClassInitParamsInitialized) { this.isGetMainClassInitParamsInitialized = true; for (final KeyValue param : this.mainClassInitialParams) { this.mainClassInitParams.put(param.getKey().toString().toLowerCase(), param.getValue().toString()); } } return this.mainClassInitParams; } public void setMainClassInitialParams(final ArrayList<KeyValue> mainClassInitialParams) { this.mainClassInitialParams = mainClassInitialParams; } public String getFileName() { return this.fileName; } public void setFileName(final String fileName) { this.fileName = fileName; } private boolean isStorageCountBased = true; public static final int STORAGE_SIZE_NOT_SET = -1; private long parsedStorageSize = STORAGE_SIZE_NOT_SET; /** * @return Returns the storageHistorySize. */ public String getStorageHistorySize() { if (storageHistorySize == null) { if (storage == null || storage.getStorageSize() == null || storage.getStorageSize().trim().equals("")) storageHistorySize = "" + STORAGE_SIZE_NOT_SET; else storageHistorySize = storage.getStorageSize(); } return storageHistorySize; } public boolean validate() { for (final InputStream inputStream : this.inputStreams) this.inputStreamNameToInputStreamObjectMapping.put(inputStream.getInputStreamName(), inputStream); try { Pair<Boolean, Long> p = Utils.parseWindowSize(this.getStorageHistorySize()); this.parsedStorageSize = p.getSecond(); this.isStorageCountBased = !p.getFirst(); } catch (final NumberFormatException e) { logger.error("The storage size, " + storageHistorySize + ", specified for the virtual sensor : " + name + " is not valid.", e); return false; } return true; } public StorageConfig getStorage() { return storage; } public void setStorage(StorageConfig sc) { this.storage = sc; } public boolean isStorageCountBased() { return this.isStorageCountBased; } public long getParsedStorageSize() { return this.parsedStorageSize; } public String getDirectoryQuery() { return directoryQuery; } /** * @return the securityCode */ public String getWebParameterPassword() { return webParameterPassword; } public void setWebParameterPassword(String p) { webParameterPassword = p; } public String toString() { final StringBuilder builder = new StringBuilder("Input Stream ["); for (final InputStream inputStream : this.getInputStreams()) { builder.append("Input-Stream-Name").append(inputStream.getInputStreamName()); builder.append("Input-Stream-Query").append(inputStream.getQuery()); builder.append(" Stream-Sources ( "); if (inputStream.getSources() == null) builder.append("null"); else for (final StreamSource ss : inputStream.getSources()) { builder.append("Stream-Source Alias : ").append(ss.getAlias()); for (final AddressBean addressing : ss.getAddressing()) { builder.append("Stream-Source-wrapper >").append(addressing.getWrapper()) .append("< with addressign predicates : "); for (final KeyValue keyValue : addressing.getPredicates()) builder.append("Key=").append(keyValue.getKey()).append("Value=") .append(keyValue.getValue()); } builder.append(" , "); } builder.append(")"); } builder.append("]"); return "VSensorConfig{" + "name='" + this.name + '\'' + ", priority=" + this.priority + ", mainClass='" + this.mainClass + '\'' + ", description='" + this.description + '\'' + ", outputStreamRate=" + this.outputStreamRate + ", addressing=" + this.addressing + ", outputStructure=" + this.outputStructure + ", storageHistorySize='" + this.storageHistorySize + '\'' + builder.toString() + ", mainClassInitialParams=" + this.mainClassInitialParams + ", lastModified=" + this.lastModified + ", fileName='" + this.fileName + '\'' + ", logger=" + this.logger + ", nameInitialized=" + this.nameInitialized + ", isStorageCountBased=" + this.isStorageCountBased + ", parsedStorageSize=" + this.parsedStorageSize + '}'; } public boolean equals(Object obj) { if (obj instanceof VSensorConfig) { VSensorConfig vSensorConfig = (VSensorConfig) obj; return name.equals(vSensorConfig.getName()); } return false; } public int hashCode() { if (name != null) { return name.hashCode(); } else { return super.hashCode(); } } // time zone public SimpleDateFormat getSDF() { if (timeZone == null) return null; else { if (sdf == null) { sdf = new SimpleDateFormat(Main.getContainerConfig().getTimeFormat()); sdf.setTimeZone(TimeZone.getTimeZone(timeZone)); } } return sdf; } /** * @return the webinput */ public WebInput[] getWebinput() { return webinput; } public void setWebInput(WebInput[] webInput) { this.webinput = webInput; } public void setInputStreams(InputStream... inputStreams) { this.inputStreams = inputStreams; } public void setStorageHistorySize(String storageHistorySize) { this.storageHistorySize = storageHistorySize; } public boolean getPublishToSensorMap() { if (sensorMap == null) return false; return Boolean.parseBoolean(sensorMap.toString()); } /** * Addressing Helper methods. */ private transient Double cached_altitude = null; private transient Double cached_longitude = null; private transient Double cached_latitude = null; private boolean addressing_processed = false; private boolean isTimestampUnique = false; public void preprocess_addressing() { if (!addressing_processed) { for (KeyValue kv : getAddressing()) if (kv.getKey().toString().equalsIgnoreCase("altitude")) cached_altitude = Double.parseDouble(kv.getValue().toString()); else if (kv.getKey().toString().equalsIgnoreCase("longitude")) cached_longitude = Double.parseDouble(kv.getValue().toString()); else if (kv.getKey().toString().equalsIgnoreCase("latitude")) cached_latitude = Double.parseDouble(kv.getValue().toString()); addressing_processed = true; } } public Double getAltitude() { preprocess_addressing(); return cached_altitude; } public Double getLatitude() { preprocess_addressing(); return cached_latitude; } public Double getLongitude() { preprocess_addressing(); return cached_longitude; } public boolean getIsTimeStampUnique() { return isTimestampUnique; } public void setIsTimeStampUnique(boolean unique) { this.isTimestampUnique = unique; } public boolean isAccess_protected() { try { return Boolean.parseBoolean(access_protected.trim()); } catch (Exception e) { logger.error(e.getMessage(), e); return false; } } }