/*******************************************************************************
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.
*
*******************************************************************************/
package org.apache.wink.example.simpledefects.legacy;
import java.util.Collection;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Implementation of a demo memory store of legacy beans. Singleton class.
* <p/>
* The class is thread-safe. All method see (or change) at the moment when they
* are invoked, later changes don't affect the returned collections, values...
*/
public class DataStore {
private static DataStore defectStore = createSingletonInstance();
final static Logger logger = LoggerFactory.getLogger(DataStore.class);
/**
* Constructor of mock defect store. It is initialized with test data.
*
* @return initialized instance
*/
private static DataStore createSingletonInstance() {
DataStore store = new DataStore();
DefectBean defectBean1 =
new DefectBean(
"1",
"Cannot perform payment",
"In Payment Services page, error message appears when trying to perform payment with valid credit card.",
new Date(50505050), "tester1", "1-critical", "New", "developer1");
DefectBean defectBean2 =
new DefectBean("2", "Cancel button is missing",
"In Payment Services Confirmation page, the Cancel button is missing.",
new Date(50505051), "tester2", "4-minor", "New", "developer2");
DefectBean defectBean3 =
new DefectBean(
"3",
"Login failure",
"When trying to login with the user 'Admin', I'm getting an error 'The user is locked'.",
new Date(50505052), "tester3", "1-critical", "Assigned", "developer3");
DefectBean defectBean4 =
new DefectBean(
"4",
"Missing expiration field",
"In Payment Services page, the expiration field of credit card is missing.",
new Date(50505052), "tester2", "2-high", "Assigned", "developer3");
DefectBean defectBean5 =
new DefectBean(
"5",
"Missing asterisk for mandatory fields",
"In Payment Services page, there is no indication for mandatory fields.",
new Date(50505052), "tester2", "4-minor", "Assigned", "developer3");
DefectBean defectBean6 =
new DefectBean(
"6",
"User is not locked",
"When trying to login with the same user three times with wrong password, the user doesn't get locked.",
new Date(50505052), "tester3", "2-high", "Fixed", "developer2");
DefectBean defectBean7 =
new DefectBean("7", "Logout button", "The pages are missing the button 'logout'.",
new Date(50505052), "tester1", "2-high", "New", "developer1");
DefectBean defectBean8 =
new DefectBean("8", "Error messages", "Error messages are not displayed in red color",
new Date(50505052), "tester1", "4-minor", "Fixed", "developer1");
DefectBean defectBean9 =
new DefectBean(
"9",
"Submit button is disabled in Edit Profile page",
"When trying to submit changes in Edit Profile page, the Submit button is disabled.",
new Date(50505052), "tester3", "2-high", "New", "developer1");
DefectBean defectBean10 =
new DefectBean("10", "Id field is disabled in Edit Profile page",
"Cannot change the Id in Edit Profile page, it is disabled.",
new Date(50505052), "tester1", "2-high", "New", "developer1");
DefectBean defectBean11 =
new DefectBean("11", "Cannot login to the system",
"Cannot login to the system with the user 'David'.", new Date(50505052),
"tester3", "1-critical", "Rejected", "developer1");
DefectBean defectBean12 =
new DefectBean("12", "Checkbox is disabled",
"Checkbox is disabled in Edit Profile page", new Date(50505052),
"tester3", "2-high", "Rejected", "developer1");
DefectBean defectBean13 =
new DefectBean("13", "Missing message text",
"Missing message text in Edit Profile page", new Date(50505052),
"tester3", "4-minor", "Rejected", "developer1");
DefectBean defectBean14 =
new DefectBean(
"14",
"Wrong translation for the word 'user'",
"When moving to French language the translation of 'user' word is incorrect",
new Date(50505052), "tester3", "2-high", "Rejected", "developer1");
store.putDefect(defectBean1.getId(), defectBean1);
store.putDefect(defectBean2.getId(), defectBean2);
store.putDefect(defectBean3.getId(), defectBean3);
store.putDefect(defectBean4.getId(), defectBean4);
store.putDefect(defectBean5.getId(), defectBean5);
store.putDefect(defectBean6.getId(), defectBean6);
store.putDefect(defectBean7.getId(), defectBean7);
store.putDefect(defectBean8.getId(), defectBean8);
store.putDefect(defectBean9.getId(), defectBean9);
store.putDefect(defectBean10.getId(), defectBean10);
store.putDefect(defectBean11.getId(), defectBean11);
store.putDefect(defectBean12.getId(), defectBean12);
store.putDefect(defectBean13.getId(), defectBean13);
store.putDefect(defectBean14.getId(), defectBean14);
return store;
}
private final Map<String, DefectBean> defects;
private long defectId = 0;
/**
* Constructor of memory defect store. It is initialized with test data.
*/
private DataStore() {
defects = Collections.synchronizedMap(new HashMap<String, DefectBean>());
}
/**
* Returns instance of demo store of defect beans.
*
* @return the instance of demo defect store
*/
public static DataStore getInstance() {
return defectStore;
}
/**
* Returns all defect beans in a collection.
* <p>
* The returned collection is a copy of actual collection. This means that
* changes in the store will not effect the returned collection. Make sure
* to call this method each time the collection might have been changed.
*
* @return collection of defect beans
*/
public Collection<DefectBean> getDefects() {
synchronized (defects) {
return new HashSet<DefectBean>(defects.values());
}
}
/**
* Updates or creates defect of given key with provided value.
*
* @param key defect key.
* @param Defect defect bean.
*/
public void putDefect(String key, DefectBean Defect) {
this.defects.put(key, Defect);
try {
synchronized (defects) {
long parseLong = Long.parseLong(key);
if (this.defectId < parseLong) {
this.defectId = parseLong + 1;
}
}
} catch (NumberFormatException e) {
}
}
/**
* Gives Defect of requested defect id.
*
* @param key requested defect key (defect id).
* @return requested defect, or <tt>null</tt> if Defect with such key does
* not exist.
*/
public DefectBean getDefect(String key) {
return this.defects.get(key);
}
/**
* Returns <tt>true</tt> is memory store has defect for the provided key
* (defect id).
*
* @param key requested defect key (defect id).
* @return <tt>true</tt> if the memory store holds the defect of the
* provided key.
*/
public boolean containsDefect(String key) {
return this.defects.containsKey(key);
}
/**
* Removes defect legacy bean from memory store for specified defect key.
* Removes also the key.
*
* @param key requested defect key (defect id).
* @return previous defect bean associated with specified key, or
* <tt>null<tt> if there was no mapping for key.
*/
public DefectBean removeDefect(String key) {
return this.defects.remove(key);
}
/**
* This method finds the highest Id of the defect beans in the memory store
* and assuming it is Integer it returns value incremented by 1. In case it
* is not Integer it returns String generated from the current time.
*
* @return unique defect Id
*/
public String getDefectUniqueId() {
return Long.toString(++defectId);
}
}