source: trunk/autoquest-core-usability/src/main/java/de/ugoe/cs/autoquest/usability/UsabilityDefectDescription.java @ 1335

Last change on this file since 1335 was 1335, checked in by pharms, 10 years ago
  • corrected and extended usability evaluations
  • checking now more text field specific for required input formats and word repetitions
  • checking also for required scrolls
File size: 5.9 KB
Line 
1//   Copyright 2012 Georg-August-Universität Göttingen, Germany
2//
3//   Licensed under the Apache License, Version 2.0 (the "License");
4//   you may not use this file except in compliance with the License.
5//   You may obtain a copy of the License at
6//
7//       http://www.apache.org/licenses/LICENSE-2.0
8//
9//   Unless required by applicable law or agreed to in writing, software
10//   distributed under the License is distributed on an "AS IS" BASIS,
11//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12//   See the License for the specific language governing permissions and
13//   limitations under the License.
14
15package de.ugoe.cs.autoquest.usability;
16
17import java.io.IOException;
18import java.io.InputStream;
19import java.util.ArrayList;
20import java.util.List;
21import java.util.Map;
22
23import javax.xml.bind.JAXBContext;
24import javax.xml.bind.JAXBElement;
25import javax.xml.bind.Unmarshaller;
26
27/**
28 * TODO comment
29 *
30 * @version $Revision: $ $Date: 18.07.2012$
31 * @author 2012, last modified by $Author: pharms$
32 */
33public enum UsabilityDefectDescription {
34   
35    SCROLL_REQUIRED,
36    TEXT_FIELD_INPUT_RATIO,
37    TEXT_FIELD_INPUT_REPETITIONS,
38    TEXT_FIELD_NO_LETTER_OR_DIGIT_RATIO;
39
40    /** */
41    private static final String DEFAULT_MESSAGES_FILE = "defectDescriptions_en.xml";
42
43    /** */
44    private static DefectDescriptions sDefectDescriptions;
45
46    /** */
47    private DefectDescription defectDescription;
48
49    /**
50     *
51     */
52    private UsabilityDefectDescription() {
53        init();
54    }
55
56    /**
57     *
58     */
59    @SuppressWarnings("unchecked")
60    private void init() {
61        synchronized (this.getClass()) {
62            if (sDefectDescriptions == null) {
63                InputStream inputStream =
64                    ClassLoader.getSystemResourceAsStream(DEFAULT_MESSAGES_FILE);
65
66                try {
67                    String packageName = DefectDescriptions.class.getPackage().getName();
68                    JAXBContext jaxbContext = JAXBContext.newInstance(packageName);
69                    Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
70
71                    sDefectDescriptions =
72                        ((JAXBElement<DefectDescriptions>) unmarshaller.unmarshal(inputStream))
73                            .getValue();
74                }
75                catch (Exception e) {
76                    throw new RuntimeException
77                        ("error while initializing usability defect descriptions", e);
78                }
79                finally {
80                    if (inputStream != null) {
81                        try {
82                            inputStream.close();
83                        }
84                        catch (IOException e) {
85                            // ignore
86                        }
87                    }
88                }
89            }
90        }
91
92        for (DefectDescription description : sDefectDescriptions.getDefectDescription()) {
93            if (this.name().equals(description.getDefectId())) {
94                defectDescription = description;
95                break;
96            }
97        }
98
99        if (defectDescription == null) {
100            throw new RuntimeException
101                ("error while initializing usability defect descriptions. No " +
102                 "description text available for description " + this.name());
103        }
104    }
105
106    /**
107     *
108     */
109    public String[] getDescriptionParameters() {
110        List<String> parameters = new ArrayList<String>();
111
112        for (Object fragment : defectDescription.getTextFragmentOrParameterFragment()) {
113            if (fragment instanceof ParameterFragment) {
114                parameters.add(((ParameterFragment) fragment).getParameterName());
115            }
116        }
117
118        return parameters.toArray(new String[parameters.size()]);
119    }
120
121    /**
122     *
123     */
124    public String toString(Map<String, String> parameters) throws IllegalArgumentException {
125        StringBuffer result = new StringBuffer();
126
127        for (Object fragment : defectDescription.getTextFragmentOrParameterFragment()) {
128            if (result.length() > 0) {
129                result.append(" ");
130            }
131
132            if (fragment instanceof ParameterFragment) {
133                String value = null;
134                if (parameters != null) {
135                    value = parameters.get(((ParameterFragment) fragment).getParameterName());
136                }
137
138                if (value != null) {
139                    result.append(value);
140                }
141                else {
142                    throw new IllegalArgumentException
143                        ("required parameter \"" +
144                         ((ParameterFragment) fragment).getParameterName() +
145                         "\" for usability defect description " + this.name() + " not provided");
146                }
147            }
148            else {
149                result.append(getFragmentString(fragment));
150            }
151        }
152
153        return result.toString();
154    }
155
156    /*
157     * (non-Javadoc)
158     *
159     * @see java.lang.Enum#toString()
160     */
161    @Override
162    public String toString() {
163        StringBuffer result = new StringBuffer();
164
165        int paramCount = 1;
166        for (Object fragment : defectDescription.getTextFragmentOrParameterFragment()) {
167            if (result.length() > 0) {
168                result.append(" ");
169            }
170
171            if (fragment instanceof ParameterFragment) {
172                result.append("<parameter");
173                result.append(paramCount++);
174                result.append(">");
175            }
176            else {
177                result.append(getFragmentString(fragment));
178            }
179        }
180
181        return result.toString();
182    }
183
184    /**
185     *
186     */
187    private String getFragmentString(Object fragment) {
188        String fragmentStr = fragment.toString().trim();
189
190        fragmentStr = fragmentStr.replaceAll("\n", " ");
191
192        while (fragmentStr.indexOf("  ") > -1) {
193            fragmentStr = fragmentStr.replaceAll("  ", " ");
194        }
195
196        return fragmentStr;
197    }
198
199}
Note: See TracBrowser for help on using the repository browser.