ingo@1172: package de.intevation.flys.artifacts.states; ingo@1172: ingo@1178: import org.apache.log4j.Logger; ingo@1178: ingo@1178: import de.intevation.artifacts.Artifact; ingo@1178: import de.intevation.artifacts.CallContext; ingo@1178: ingo@1178: import de.intevation.artifactdatabase.data.DefaultStateData; ingo@1178: import de.intevation.artifactdatabase.data.StateData; ingo@1178: ingo@1178: import de.intevation.flys.artifacts.FLYSArtifact; ingo@1178: import de.intevation.flys.utils.FLYSUtils; ingo@1178: ingo@1178: ingo@1172: /** ingo@1172: * @author Ingo Weinzierl ingo@1172: */ ingo@1172: public class WaterlevelSelectState extends DefaultState { ingo@1172: ingo@1178: private static final Logger logger = ingo@1178: Logger.getLogger(WaterlevelSelectState.class); ingo@1178: ingo@1178: public static final String SPLIT_CHAR = ";"; ingo@1178: ingo@1178: ingo@1172: @Override ingo@1172: protected String getUIProvider() { ingo@1172: return "wsp_datacage_panel"; ingo@1172: } ingo@1178: ingo@1178: ingo@1178: @Override ingo@1178: public StateData transform( ingo@1178: FLYSArtifact flys, ingo@1178: CallContext cc, ingo@1178: String name, ingo@1178: String val ingo@1178: ) { ingo@1178: if (!isValueValid(val)) { ingo@1178: logger.error("The given input string is not valid: '" + val + "'"); ingo@1178: return null; ingo@1178: } ingo@1178: ingo@1178: return new DefaultStateData(name, null, null, strip(val)); ingo@1178: } ingo@1178: ingo@1178: ingo@1178: @Override ingo@1178: public boolean validate(Artifact artifact) ingo@1178: throws IllegalArgumentException ingo@1178: { ingo@1178: FLYSArtifact flys = (FLYSArtifact) artifact; ingo@1178: ingo@1178: StateData data = flys.getData("wsp"); ingo@1178: ingo@1178: if (data == null) { ingo@1178: throw new IllegalArgumentException("WSP is empty"); ingo@1178: } ingo@1178: ingo@1178: return true; ingo@1178: } ingo@1178: ingo@1178: ingo@1178: public static String strip(String value) { ingo@1178: int start = value.indexOf("["); ingo@1178: int end = value.indexOf("]"); ingo@1178: ingo@1178: if (start < 0 || end < 0) { ingo@1178: return value; ingo@1178: } ingo@1178: ingo@1178: value = value.substring(start+1, end); ingo@1178: ingo@1178: return value; ingo@1178: } ingo@1178: ingo@1178: ingo@1178: /** ingo@1178: * Validates the given String. A valid string for this state requires the ingo@1178: * format: "UUID;FACETNAME;FACETINDEX". ingo@1178: * ingo@1178: * @param value The string value requires validation. ingo@1178: * ingo@1178: * @return true, if the string applies the specified format, otherwise ingo@1178: * false. ingo@1178: */ ingo@1178: public static boolean isValueValid(String value) { ingo@1178: logger.debug("Validate string: '" + value + "'"); ingo@1178: ingo@1178: value = strip(value); ingo@1178: ingo@1178: logger.debug("Validate substring: '" + value + "'"); ingo@1178: ingo@1178: if (value == null || value.length() == 0) { ingo@1178: return false; ingo@1178: } ingo@1178: ingo@1178: String[] parts = value.split(SPLIT_CHAR); ingo@1178: ingo@1178: if (parts == null || parts.length < 3) { ingo@1178: return false; ingo@1178: } ingo@1178: ingo@1178: if (parts[0] == null || parts[0].length() == 0) { ingo@1178: return false; ingo@1178: } ingo@1178: ingo@1178: if (parts[1] == null || parts[1].length() == 0) { ingo@1178: return false; ingo@1178: } ingo@1178: ingo@1178: try { ingo@1178: Integer.parseInt(parts[2]); ingo@1178: } ingo@1178: catch (NumberFormatException nfe) { ingo@1178: logger.error("Index is not a valid integer!", nfe); ingo@1178: } ingo@1178: ingo@1178: return true; ingo@1178: } ingo@1172: } ingo@1172: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :