/* * Encog(tm) Core v3.4 - Java Version * http://www.heatonresearch.com/encog/ * https://github.com/encog/encog-java-core * Copyright 2008-2016 Heaton Research, Inc. * * 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. * * For more information on Heaton Research copyrights, licenses * and trademarks visit: * http://www.heatonresearch.com/copyright */ package org.encog.app.analyst.script.prop; import org.encog.app.analyst.AnalystError; import org.encog.app.analyst.util.ConvertStringConst; /** * A property entry for the Encog Analyst. Properties have a name and section. * */ public class PropertyEntry implements Comparable<PropertyEntry> { /** * Put a property in dot form, which is "section.subsection.name". * @param section The section. * @param subSection The subsection. * @param name The name. * @return The property in dot form. */ public static String dotForm(final String section, final String subSection, final String name) { final StringBuilder result = new StringBuilder(); result.append(section); result.append('.'); result.append(subSection); result.append('.'); result.append(name); return result.toString(); } /** * The type of property. */ private final PropertyType entryType; /** * The name of the property. */ private final String name; /** * The section of the property. */ private final String section; /** * Construct a property entry. * @param theEntryType The entry type. * @param theName The name of the property. * @param theSection The section of the property. */ public PropertyEntry(final PropertyType theEntryType, final String theName, final String theSection) { super(); this.entryType = theEntryType; this.name = theName; this.section = theSection; } /** * {@inheritDoc} */ @Override public int compareTo(final PropertyEntry o) { return this.name.compareTo(o.name); } /** * @return the entryType */ public PropertyType getEntryType() { return this.entryType; } /** * @return The key. */ public String getKey() { return this.section + "_" + this.name; } /** * @return the name */ public String getName() { return this.name; } /** * @return the section */ public String getSection() { return this.section; } /** {@inheritDoc} */ @Override public String toString() { final StringBuilder result = new StringBuilder("["); result.append(getClass().getSimpleName()); result.append(" name="); result.append(this.name); result.append(", section="); result.append(this.section); result.append("]"); return result.toString(); } /** * Validate the specified property. * @param theSection The section. * @param subSection The sub section. * @param theName The name of the property. * @param value The value of the property. */ public void validate(final String theSection, final String subSection, final String theName, final String value) { if ((value == null) || (value.length() == 0)) { return; } try { switch (getEntryType()) { case TypeBoolean: if ((Character.toUpperCase(value.charAt(0)) != 'T') && (Character.toUpperCase(value.charAt(0)) != 'F')) { final StringBuilder result = new StringBuilder(); result.append("Illegal boolean for "); result.append(PropertyEntry.dotForm(section, subSection, name)); result.append(", value is "); result.append(value); result.append("."); throw new AnalystError(result.toString()); } break; case TypeDouble: Double.parseDouble(value); break; case typeFormat: if (ConvertStringConst.string2AnalystFileFormat(value) == null) { final StringBuilder result = new StringBuilder(); result.append("Invalid file format for "); result.append(PropertyEntry.dotForm(section, subSection, name)); result.append(", value is "); result.append(value); result.append("."); throw new AnalystError(result.toString()); } break; case TypeInteger: Integer.parseInt(value); break; case TypeListString: break; case TypeString: break; default: throw new AnalystError("Unsupported property type."); } } catch (final NumberFormatException ex) { final StringBuilder result = new StringBuilder(); result.append("Illegal value for "); result.append(PropertyEntry.dotForm(section, subSection, name)); result.append(", expecting a "); result.append(getEntryType().toString()); result.append(", but got "); result.append(value); result.append("."); throw new AnalystError(result.toString()); } } }