/******************************************************************************* * * Copyright 2011-2014 Spiffy UI Team * * 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. * ******************************************************************************/ package org.spiffyui.spsample.server; import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import java.util.List; import java.util.logging.Logger; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; /** * This servlet gets colors that match the query string. It can be accessed as * GET /multivaluesuggestboxexample/colors. The colors are from * http://en.wikipedia.org/wiki/List_of_Crayola_crayon_colors */ public class CrayonColorsServlet extends HttpServlet { private static final Logger LOGGER = Logger.getLogger(CrayonColorsServlet.class.getName()); private static final long serialVersionUID = -3440848986748523758L; private static final List<String[]> COLOR_CODES; private String m_lastQuery; private JSONArray m_lastResults; static { COLOR_CODES = new ArrayList<String[]>(); COLOR_CODES.add(new String[]{"Almond", "#EFDECD", "a brown issued in 1998", "(239, 222, 205)"}); COLOR_CODES.add(new String[]{"Antique Brass", "#CD9575", "a metallic brown issued in 1998", "(205, 149, 117)"}); COLOR_CODES.add(new String[]{"Apricot", "#FDD9B5", "an orange issued in 1949", "(253, 217, 181)"}); COLOR_CODES.add(new String[]{"Aquamarine", "#78DBE2", "a blue issued in 1958", "(120, 219, 226)"}); COLOR_CODES.add(new String[]{"Asparagus", "#87A96B", "a green issued in 1993", "(135, 169, 107)"}); COLOR_CODES.add(new String[]{"Atomic Tangerine", "#FFA474", "a fluorescent orange renamed from 'Ultra Yellow' in 1990 issued in 1972", "(255, 164, 116)"}); COLOR_CODES.add(new String[]{"Banana Mania", "#FAE7B5", "a yellow issued in 1998", "(250, 231, 181)"}); COLOR_CODES.add(new String[]{"Beaver", "#9F8170", "a brown issued in 1998", "(159, 129, 112)"}); COLOR_CODES.add(new String[]{"Bittersweet", "#FD7C6E", "an orange issued in 1949", "(253, 124, 110)"}); COLOR_CODES.add(new String[]{"Black", "#000000", "a basic color issued in 1903", "(0,0,0)"}); COLOR_CODES.add(new String[]{"Blizzard Blue", "#ACE5EE", "a fluorescent blue renamed from 'Ultra Blue' in 1990 issued in 1972 and retired in 2003", "(172, 229, 238)"}); COLOR_CODES.add(new String[]{"Blue", "#1F75FE", "a basic color issued in 1903", "(31, 117, 254)"}); COLOR_CODES.add(new String[]{"Blue Bell", "#A2A2D0", "a blue issued in 1998", "(162, 162, 208)"}); COLOR_CODES.add(new String[]{"Blue Gray", "#6699CC", "a blue issued in 1958 and retired in 1990", "(102, 153, 204)"}); COLOR_CODES.add(new String[]{"Blue Green", "#0D98BA", "a blue issued in 1949", "(13, 152, 186)"}); COLOR_CODES.add(new String[]{"Blue Violet", "#7366BD", "a violet issued in 1949", "(115, 102, 189)"}); COLOR_CODES.add(new String[]{"Blush", "#DE5D83", "a pink renamed from 'Cranberry' in 2000 issued in 1998", "(222, 93, 131)"}); COLOR_CODES.add(new String[]{"Brick Red", "#CB4154", "a red issued in 1949", "(203, 65, 84)"}); COLOR_CODES.add(new String[]{"Brown", "#B4674D", "a basic color issued in 1903", "(180, 103, 77)"}); COLOR_CODES.add(new String[]{"Burnt Orange", "#FF7F49", "a dark orange issued in 1958", "(255, 127, 73)"}); COLOR_CODES.add(new String[]{"Burnt Sienna", "#EA7E5D", "a brown issued in 1949", "(234, 126, 93)"}); COLOR_CODES.add(new String[]{"Cadet Blue", "#B0B7C6", "a blue issued in 1958", "(176, 183, 198)"}); COLOR_CODES.add(new String[]{"Canary", "#FFFF99", "a yellow issued in 1998", "(255, 255, 153)"}); COLOR_CODES.add(new String[]{"Caribbean Green", "#1CD3A2", "a green issued in 1998", "(28, 211, 162)"}); COLOR_CODES.add(new String[]{"Carnation Pink", "#FFAACC", "a pink issued in 1949", "(255, 170, 204)"}); COLOR_CODES.add(new String[]{"Cerise", "#DD4492", "a pink issued in 1993", "(221, 68, 146)"}); COLOR_CODES.add(new String[]{"Cerulean", "#1DACD6", "a blue issued in 1990", "(29, 172, 214)"}); COLOR_CODES.add(new String[]{"Chestnut", "#BC5D58", "a brown issued renamed from 'Indian Red' in 1999 issued in 1958", "(188, 93, 88)"}); COLOR_CODES.add(new String[]{"Copper", "#DD9475", "a metallic brown issued in 1958", "(221, 148, 117)"}); COLOR_CODES.add(new String[]{"Cornflower", "#9ACEEB", "a blue issued in 1949", "(154, 206, 235)"}); COLOR_CODES.add(new String[]{"Cotton Candy", "#FFBCD9", "a pink issued in 1998", "(255, 188, 217)"}); COLOR_CODES.add(new String[]{"Dandelion", "#FDDB6D", "a yellow issued in 1990", "(253, 219, 109)"}); COLOR_CODES.add(new String[]{"Denim", "#2B6CC4", "a blue issued in 1993", "(43, 108, 196)"}); COLOR_CODES.add(new String[]{"Desert Sand", "#EFCDB8", "a brown issued in 1998", "(239, 205, 184)"}); COLOR_CODES.add(new String[]{"Eggplant", "#6E5160", "a violet issued in 1998", "(110, 81, 96)"}); COLOR_CODES.add(new String[]{"Electric Lime", "#CEFF1D", "a fluorescent green issued in 1990", "(206, 255, 29)"}); COLOR_CODES.add(new String[]{"Fern", "#71BC78", "a green issued in 1998", "(113, 188, 120)"}); COLOR_CODES.add(new String[]{"Forest Green", "#6DAE81", "a green issued in 1958", "(109, 174, 129)"}); COLOR_CODES.add(new String[]{"Fuchsia", "#C364C5", "a pink issued in 1990", "(195, 100, 197)"}); COLOR_CODES.add(new String[]{"Fuzzy Wuzzy", "#CC6666", "a brown issued in 1998", "(204, 102, 102)"}); COLOR_CODES.add(new String[]{"Gold", "#E7C697", "a metallic yellow issued in 1949", "(231, 198, 151)"}); COLOR_CODES.add(new String[]{"Goldenrod", "#FCD975", "a yellow issued in 1958", "(252, 217, 117)"}); COLOR_CODES.add(new String[]{"Granny Smith Apple", "#A8E4A0", "a green issued in 1993", "(168, 228, 160)"}); COLOR_CODES.add(new String[]{"Gray", "#95918C", "a light black issued in 1949", "(149, 145, 140)"}); COLOR_CODES.add(new String[]{"Green", "#1CAC78", "a base color issued in 1903", "(28, 172, 120)"}); COLOR_CODES.add(new String[]{"Green Blue", "#1164B4", "a blue issued in 1949 and retired in 1990", "(17, 100, 180)"}); COLOR_CODES.add(new String[]{"Green Yellow", "#F0E891", "a yellow issued in 1949", "(240, 232, 145)"}); COLOR_CODES.add(new String[]{"Hot Magenta", "#FF1DCE", "a fluorescent pink", "(255, 29, 206)"}); COLOR_CODES.add(new String[]{"Inchworm", "#B2EC5D", "a green issued in 2003", "(178, 236, 93)"}); COLOR_CODES.add(new String[]{"Indigo", "#5D76CB", "a blue issued in 2000", "(93, 118, 203)"}); COLOR_CODES.add(new String[]{"Jazzberry Jam", "#CA3767", "a red issued in 2003", "(202, 55, 103)"}); COLOR_CODES.add(new String[]{"Jungle Green", "#3BB08F", "a green issued in 1990", "(59, 176, 143)"}); COLOR_CODES.add(new String[]{"Laser Lemon", "#FEFE22", "a fluorescent yellow renamed from 'Chartreuse' in 1990 issued in 1972", "(254, 254, 34)"}); COLOR_CODES.add(new String[]{"Lavender", "#FCB4D5", "a violet issued 1958", "(252, 180, 213)"}); COLOR_CODES.add(new String[]{"Lemon Yellow", "#FFF44F", "a yellow issued in 1949 and retired in 1990", "(255, 244, 79)"}); COLOR_CODES.add(new String[]{"Macaroni and Cheese", "#FFBD88", "an orange issued in 1993", "(255, 189, 136)"}); COLOR_CODES.add(new String[]{"Magenta", "#F664AF", "a red issued in 1949", "(246, 100, 175)"}); COLOR_CODES.add(new String[]{"Magic Mint", "#AAF0D1", "a fluorescent green issued in 1990 and retired in 2003", "(170, 240, 209)"}); COLOR_CODES.add(new String[]{"Mahogany", "#CD4A4C", "a brown issued in 1949", "(205, 74, 76)"}); COLOR_CODES.add(new String[]{"Maize", "#EDD19C", "a yellow issued in 1949 and retired in 1990", "(237, 209, 156)"}); COLOR_CODES.add(new String[]{"Manatee", "#979AAA", "a violet issued in 1998", "(151, 154, 170)"}); COLOR_CODES.add(new String[]{"Mango Tango", "#FF8243", "an orange issued in 2003", "(255, 130, 67)"}); COLOR_CODES.add(new String[]{"Maroon", "#C8385A", "a red issued in 1949", "(200, 56, 90)"}); COLOR_CODES.add(new String[]{"Mauvelous", "#EF98AA", "a violet issued in 1993", "(239, 152, 170)"}); COLOR_CODES.add(new String[]{"Melon", "#FDBCB4", "an orange issued in 1949", "(253, 188, 180)"}); COLOR_CODES.add(new String[]{"Midnight Blue", "#1A4876", "a blue renamed from 'Prussian Blue' in 1958 issued in 1949", "(26, 72, 118)"}); COLOR_CODES.add(new String[]{"Mountain Meadow", "#30BA8F", "a green issued in 1998", "(48, 186, 143)"}); COLOR_CODES.add(new String[]{"Mulberry", "#C54B8C", "a violet issued in 1958 and retired in 2003", "(197, 75, 140)"}); COLOR_CODES.add(new String[]{"Navy Blue", "#1974D2", "a blue issued in 1958", "(25, 116, 210)"}); COLOR_CODES.add(new String[]{"Neon Carrot", "#FFA343", "a fluorescent orange issued in 1990", "(255, 163, 67)"}); COLOR_CODES.add(new String[]{"Olive Green", "#BAB86C", "a green issued in 1949", "(186, 184, 108)"}); COLOR_CODES.add(new String[]{"Orange", "#FF7538", "a base color", "(255, 117, 56)"}); COLOR_CODES.add(new String[]{"Orange Red", "#FF2B2B", "a red issued in 1949 and retired in 1990", "(255, 43, 43)"}); COLOR_CODES.add(new String[]{"Orange Yellow", "#F8D568", "a yellow issued in 1949 and retired in 1990", "(248, 213, 104)"}); COLOR_CODES.add(new String[]{"Orchid", "#E6A8D7", "a pink issued in 1949", "(230, 168, 215)"}); COLOR_CODES.add(new String[]{"Outer Space", "#414A4C", "a lighter black issued in 1998", "(65, 74, 76)"}); COLOR_CODES.add(new String[]{"Outrageous Orange", "#FF6E4A", "a fluorescent orange renamed from 'Ultra Orange' in 1990 issued in 1972", "(255, 110, 74)"}); COLOR_CODES.add(new String[]{"Pacific Blue", "#1CA9C9", "a blue issued in 1993", "(28, 169, 201)"}); COLOR_CODES.add(new String[]{"Peach", "#FFCFAB", "an orange renamed from 'Flesh' in 1962 issued in 1949", "(255, 207, 171)"}); COLOR_CODES.add(new String[]{"Periwinkle", "#C5D0E6", "a blue issued in 1949", "(197, 208, 230)"}); COLOR_CODES.add(new String[]{"Piggy Pink", "#FDDDE6", "a pink issued in 1998", "(253, 221, 230)"}); COLOR_CODES.add(new String[]{"Pine Green", "#158078", "a green issued in 1949", "(21, 128, 120)"}); COLOR_CODES.add(new String[]{"Pink Flamingo", "#FC74FD", "a pink issued in 1998", "(252, 116, 253)"}); COLOR_CODES.add(new String[]{"Pink Sherbert", "#F78FA7", "a pink renamed from 'Brink Pink' in 2000 issued in 1998", "(247, 143, 167)"}); COLOR_CODES.add(new String[]{"Plum", "#8E4585", "a violet issued in 1958", "(142, 69, 133)"}); COLOR_CODES.add(new String[]{"Purple Heart", "#7442C8", "a violet issued in 1998", "(116, 66, 200)"}); COLOR_CODES.add(new String[]{"Purple Mountain's Majesty", "#9D81BA", "a violet issued in 1998", "(157, 129, 186)"}); COLOR_CODES.add(new String[]{"Purple Pizzazz", "#FE4EDA", "a fluorescent violet issued in 1990", "(254, 78, 218)"}); COLOR_CODES.add(new String[]{"Radical Red", "#FF496C", "a fluorescent red issued in 1990", "(255, 73, 108)"}); COLOR_CODES.add(new String[]{"Raw Sienna", "#D68A59", "a brown issued in 1958", "(214, 138, 89)"}); COLOR_CODES.add(new String[]{"Raw Umber", "#714B23", "a brown issued in 1958 retired in 1990", "(113, 75, 35)"}); COLOR_CODES.add(new String[]{"Razzle Dazzle Rose", "#FF48D0", "a fluorescent red issued in 1990", "(255, 72, 208)"}); COLOR_CODES.add(new String[]{"Razzmatazz", "#E3256B", "a red issued in 1993", "(227, 37, 107)"}); COLOR_CODES.add(new String[]{"Red", "#EE204D", "a base color", "(238, 32, 77)"}); COLOR_CODES.add(new String[]{"Red Orange", "#FF5349", "an orange issued in 1949", "(255, 83, 73)"}); COLOR_CODES.add(new String[]{"Red Violet", "#C0448F", "a violet issued in 1949", "(192, 68, 143)"}); COLOR_CODES.add(new String[]{"Robin's Egg Blue", "#1FCECB", "a blue issued in 1993", "(31, 206, 203)"}); COLOR_CODES.add(new String[]{"Royal Purple", "#7851A9", "a violet issued in 1990", "(120, 81, 169)"}); COLOR_CODES.add(new String[]{"Salmon", "#FF9BAA", "a pink issued in 1949", "(255, 155, 170)"}); COLOR_CODES.add(new String[]{"Scarlet", "#FC2847", "a red renamed from 'Torch Red' in 2000 issued in 1998", "(252, 40, 71)"}); COLOR_CODES.add(new String[]{"Screamin' Green", "#76FF7A", "a fluorescent green renamed from 'Ultra Green' in 1990 issued in 1972", "(118, 255, 122)"}); COLOR_CODES.add(new String[]{"Sea Green", "#9FE2BF", "a green issued in 1949", "(159, 226, 191)"}); COLOR_CODES.add(new String[]{"Sepia", "#A5694F", "a brown issued in 1958", "(165, 105, 79)"}); COLOR_CODES.add(new String[]{"Shadow", "#8A795D", "a lighter black issued in 1998", "(138, 121, 93)"}); COLOR_CODES.add(new String[]{"Shamrock", "#45CEA2", "a green issued in 1993", "(69, 206, 162)"}); COLOR_CODES.add(new String[]{"Shocking Pink", "#FB7EFD", "a fluorescent pink renamed from 'Ultra Pink' in 1990 issued in 1972", "(251, 126, 253)"}); COLOR_CODES.add(new String[]{"Silver", "#CDC5C2", "a metallic light black issued in 1949", "(205, 197, 194)"}); COLOR_CODES.add(new String[]{"Sky Blue", "#80DAEB", "a blue issued in 1958", "(128, 218, 235)"}); COLOR_CODES.add(new String[]{"Spring Green", "#ECEABE", "a green issued in 1949", "(236, 234, 190)"}); COLOR_CODES.add(new String[]{"Sunglow", "#FFCF48", "a fluorescent yellow issued in 1990", "(255, 207, 72)"}); COLOR_CODES.add(new String[]{"Sunset Orange", "#FD5E53", "an orange issued in 1998", "(253, 94, 83)"}); COLOR_CODES.add(new String[]{"Tan", "#FAA76C", "a brown issued in 1949", "(250, 167, 108)"}); COLOR_CODES.add(new String[]{"Teal Blue", "#18A7B5", "a blue issued in 1990 and retired in 2003", "(24, 167, 181)"}); COLOR_CODES.add(new String[]{"Thistle", "#EBC7DF", "a pink issued in 1949 and retired in 2000", "(235, 199, 223)"}); COLOR_CODES.add(new String[]{"Tickle Me Pink", "#FC89AC", "a pink named in a contest by ClevverTV Personality Josyln Davis issued in 1993", "(252, 137, 172)"}); COLOR_CODES.add(new String[]{"Timberwolf", "#DBD7D2", "a light black issued in 1993", "(219, 215, 210)"}); COLOR_CODES.add(new String[]{"Tropical Rain Forest", "#17806D", "a green issued in 1993", "(23, 128, 109)"}); COLOR_CODES.add(new String[]{"Tumbleweed", "#DEAA88", "a brown issued in 1993", "(222, 170, 136)"}); COLOR_CODES.add(new String[]{"Turquoise Blue", "#77DDE7", "a blue issued in 1949", "(119, 221, 231)"}); COLOR_CODES.add(new String[]{"Unmellow Yellow", "#FFFF66", "a fluorescent yellow issued in 1990", "(255, 255, 102)"}); COLOR_CODES.add(new String[]{"Violet (Purple)", "#926EAE", "a base color issued in 1903", "(146, 110, 174)"}); COLOR_CODES.add(new String[]{"Violet Blue", "#324AB2", "a blue issued in 1949 and retired in 1990", "(50, 74, 178)"}); COLOR_CODES.add(new String[]{"Violet Red", "#F75394", "a red issued in 1949", "(247, 83, 148)"}); COLOR_CODES.add(new String[]{"Vivid Tangerine", "#FFA089", "an orange issued in 1990", "(255, 160, 137)"}); COLOR_CODES.add(new String[]{"Vivid Violet", "#8F509D", "a violet issued in 1998", "(143, 80, 157)"}); COLOR_CODES.add(new String[]{"White", "#FFFFFF", "a base color issued in 1949", "(255, 255, 255)"}); COLOR_CODES.add(new String[]{"Wild Blue Yonder", "#A2ADD0", "a blue issued in 2003", "(162, 173, 208)"}); COLOR_CODES.add(new String[]{"Wild Strawberry", "#FF43A4", "a red issued in 1990", "(255, 67, 164)"}); COLOR_CODES.add(new String[]{"Wild Watermelon", "#FC6C85", "a fluorescent red renamed from 'Ultra Red' in 1990 issued in 1972", "(252, 108, 133)"}); COLOR_CODES.add(new String[]{"Wisteria", "#CDA4DE", "a violet issued in 1993", "(205, 164, 222)"}); COLOR_CODES.add(new String[]{"Yellow", "#FCE883", "a base color issued in 1903", "(252, 232, 131)"}); COLOR_CODES.add(new String[]{"Yellow Green", "#C5E384", "a green issued in 1949", "(197, 227, 132)"}); COLOR_CODES.add(new String[]{"Yellow Orange", "#FFAE42", "an orange issued in 1949", "(255, 174, 66)"}); } @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { JSONArray fullColorArray; String query = request.getParameter("q"); try { int count = 0; if (query.equals(m_lastQuery)) { fullColorArray = m_lastResults; count = m_lastResults.length(); } else { m_lastQuery = query; fullColorArray = new JSONArray(); for (String[] colorCode : COLOR_CODES) { String colorName = colorCode[0]; String lowerColor = colorName.toLowerCase(); int has = lowerColor.indexOf(query.toLowerCase()); if (!query.isEmpty() && (query.equals("*") || has >= 0)) { JSONObject color = new JSONObject(); color.put("DisplayName", colorName); color.put("Value", colorCode[1]); color.put("Description", colorCode[2]); color.put("RGB", colorCode[3]); fullColorArray.put(color); count++; } } m_lastResults = fullColorArray; } //get the partial array to be returned int indexFrom = 0; if (request.getParameter("indexFrom") != null) { indexFrom = Integer.parseInt(request.getParameter("indexFrom")); } int indexTo = fullColorArray.length() - 1; if (request.getParameter("indexTo") != null) { indexTo = Integer.parseInt(request.getParameter("indexTo")); } JSONArray partial = new JSONArray(); if (fullColorArray.length() > 0) { int end = count - 1 > indexTo ? indexTo : count - 1; for (int i = indexFrom; i <= end; i++) { partial.put(fullColorArray.get(i)); } } response.setContentType("application/json"); PrintWriter out = response.getWriter(); JSONObject obj = new JSONObject(); obj.put("TotalSize", count); obj.put("Options", partial); out.println(obj.toString()); } catch (JSONException e) { /* This should never happen */ LOGGER.throwing(getClass().getName(), "doGet", e); } } }