1 /* Copyright (c) 2009 Peter Troshin
\r
3 * JAva Bioinformatics Analysis Web Services (JABAWS) @version: 1.0
\r
5 * This library is free software; you can redistribute it and/or modify it under the terms of the
\r
6 * Apache License version 2 as published by the Apache Software Foundation
\r
8 * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
\r
9 * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Apache
\r
10 * License for more details.
\r
12 * A copy of the license is in apache_license.txt. It is also available here:
\r
13 * @see: http://www.apache.org/licenses/LICENSE-2.0.txt
\r
15 * Any republication or derived work distributed in source code form
\r
16 * must include this copyright and license notice.
\r
19 package compbio.metadata;
\r
21 import java.util.List;
\r
23 import javax.xml.bind.ValidationException;
\r
24 import javax.xml.bind.annotation.XmlAccessType;
\r
25 import javax.xml.bind.annotation.XmlAccessorType;
\r
26 import javax.xml.bind.annotation.XmlRootElement;
\r
28 import compbio.util.Util;
\r
31 * A collection of Limits
\r
36 * @version 1.0 January 2010
\r
40 @XmlRootElement(name = "limits")
\r
41 @XmlAccessorType(XmlAccessType.FIELD)
\r
42 public class LimitsManager<T> {
\r
44 String runnerClassName;
\r
45 List<Limit<T>> limit;
\r
49 * @return all limits defined for an executable T
\r
51 public List<Limit<T>> getLimits() {
\r
56 public String toString() {
\r
57 return "LimitsManager [limits=" + limit + ", runnerClassName="
\r
58 + runnerClassName + "]";
\r
64 * @return Limit defined for the executable T and presetName. If no limit is
\r
65 * defined for the presetName then default Limit is returned. If
\r
66 * presetName is empty or null than the default Limit will be
\r
67 * returned. If not limit defined for the type T than NULL will be
\r
70 public Limit<T> getLimitByName(String presetName) {
\r
71 if (limit == null) {
\r
74 if (Util.isEmpty(presetName)) {
\r
75 // return default limit
\r
76 return getDefaultLimit();
\r
78 for (Limit<T> lim : limit) {
\r
79 String preset = lim.getPreset();
\r
80 if (preset == null) {
\r
83 if (preset.equalsIgnoreCase(presetName)) {
\r
92 * @return the default Limit for an executable type T
\r
94 public Limit<T> getDefaultLimit() {
\r
95 for (Limit<T> lim : limit) {
\r
96 if (lim.isDefault) {
\r
109 * @throws ValidationException
\r
110 * if any of the Limit defined is found to be invalid. That is
\r
113 * 1) No default limit is defined
\r
115 * 2) More than 1 default limit is defined
\r
117 * 3) Limit's preset name does not match any presets for type T
\r
119 public void validate(PresetManager<T> presets) throws ValidationException {
\r
121 for (Limit<T> lim : limit) {
\r
122 if (lim.isDefault) {
\r
126 if (defaults == 0) {
\r
127 throw new ValidationException("Default limit is not set!");
\r
129 if (defaults > 1) {
\r
130 throw new ValidationException(
\r
131 "Default limit is set more than once!");
\r
133 if (presets != null) {
\r
134 for (Limit<T> lim : limit) {
\r
136 String presetName = lim.getPreset();
\r
137 // skip "special" preset
\r
138 if (presetName != null
\r
140 .equals(PresetManager.LOCAL_ENGINE_LIMIT_PRESET)) {
\r
141 Preset<T> preset = presets.getPresetByName(presetName);
\r
142 if (preset == null) {
\r
143 throw new ValidationException("Preset " + presetName
\r
144 + " is not found!");
\r