001/**
002 * Copyright (C) 2014  Universidade de Aveiro, DETI/IEETA, Bioinformatics Group - http://bioinformatics.ua.pt/
003 *
004 * This file is part of Dicoogle/dicoogle.
005 *
006 * Dicoogle/dicoogle is free software: you can redistribute it and/or modify
007 * it under the terms of the GNU General Public License as published by
008 * the Free Software Foundation, either version 3 of the License, or
009 * (at your option) any later version.
010 *
011 * Dicoogle/dicoogle is distributed in the hope that it will be useful,
012 * but WITHOUT ANY WARRANTY; without even the implied warranty of
013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
014 * GNU General Public License for more details.
015 *
016 * You should have received a copy of the GNU General Public License
017 * along with Dicoogle.  If not, see <http://www.gnu.org/licenses/>.
018 */
019
020package pt.ua.dicoogle.server.web.servlets.management;
021
022import java.io.IOException;
023
024import javax.servlet.ServletException;
025import javax.servlet.http.HttpServlet;
026import javax.servlet.http.HttpServletRequest;
027import javax.servlet.http.HttpServletResponse;
028
029import net.sf.json.JSONObject;
030
031import org.apache.commons.lang3.StringUtils;
032
033import pt.ua.dicoogle.core.ServerSettings;
034import pt.ua.dicoogle.core.XMLSupport;
035
036/**
037 *
038 * @author Frederico Silva <fredericosilva@ua.pt>
039 */
040public class IndexerSettingsServlet extends HttpServlet {
041
042    public enum SettingsType {
043
044        all,path, zip, effort, thumbnail,thumbnailSize, watcher;
045    }
046    private final SettingsType type;
047
048    public IndexerSettingsServlet(SettingsType type) {
049        this.type = type;
050    }
051
052    @Override
053    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
054        
055        String param = null;
056        String path = null;
057        boolean watcher=false, zip = false, saveT = false;
058        int ieffort = 0;
059        String tumbnailSize = null;
060        if(type != SettingsType.all)
061        {
062                param = req.getParameter(type.toString());
063        
064                if (StringUtils.isEmpty(param)) {
065                resp.sendError(400, "Invalid " + type.toString());
066            }
067        }
068        else{
069                path = req.getParameter("path");
070                watcher = Boolean.parseBoolean(req.getParameter("watcher"));
071                zip = Boolean.parseBoolean(req.getParameter("zip"));
072                saveT = Boolean.parseBoolean(req.getParameter("saveThumbnail"));
073                ieffort = Integer.parseInt(req.getParameter("effort"));
074                tumbnailSize = req.getParameter("thumbnailSize");
075        }
076
077        switch (type) {
078            case path:
079                ServerSettings.getInstance().setDicoogleDir(param);
080                resp.getWriter().append("Dir set to: " + param);
081                break;
082            case zip:
083                boolean gzip = Boolean.parseBoolean(param);
084                ServerSettings.getInstance().setGzipStorage(gzip);
085                resp.getWriter().append("Storage/Index Files compressed  set to: " + param);
086                break;
087            case effort:
088                //TODO: CHECK ACCPTABLE RANGE
089                int effort = Integer.parseInt(param);
090                ServerSettings.getInstance().setIndexerEffort(effort);
091                resp.getWriter().append("index effort set to: " + effort);
092                break;
093            case thumbnail:
094                boolean saveThumbanail = Boolean.parseBoolean(param);
095                ServerSettings.getInstance().setSaveThumbnails(saveThumbanail);
096                break;
097            case thumbnailSize:
098                //TODO: Should be a int
099                //int thumbSize = Integer.parseInt(param);
100                ServerSettings.getInstance().setThumbnailsMatrix(param);
101                break;
102            case watcher:
103                ServerSettings.getInstance().setMonitorWatcher(Boolean.parseBoolean(param));
104                break;
105            case all:
106                 ServerSettings.getInstance().setDicoogleDir(path);
107                 ServerSettings.getInstance().setGzipStorage(zip);
108                 ServerSettings.getInstance().setIndexerEffort(ieffort);
109                 ServerSettings.getInstance().setSaveThumbnails(saveT);
110                 ServerSettings.getInstance().setThumbnailsMatrix(tumbnailSize);
111                 ServerSettings.getInstance().setMonitorWatcher(watcher);
112                break;
113                
114        }
115        new XMLSupport().printXML();
116    }
117
118    @Override
119    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
120        String result = "";
121        resp.setContentType("application/json");
122        switch (type) {
123            case path:
124                result = ServerSettings.getInstance().getDicoogleDir();
125                break;
126            case zip:
127                result = String.valueOf(ServerSettings.getInstance().isGzipStorage());
128                break;
129            case effort:
130                result = String.valueOf(ServerSettings.getInstance().getIndexerEffort());
131                break;
132            case thumbnail:
133                result = String.valueOf(ServerSettings.getInstance().getSaveThumbnails());
134                break;
135            case thumbnailSize:
136                result = String.valueOf(ServerSettings.getInstance().getThumbnailsMatrix());
137                break;
138            case watcher:
139                result = String.valueOf(ServerSettings.getInstance().isMonitorWatcher());
140                break;
141            case all:
142                JSONObject allresponse = new JSONObject();
143                allresponse.put("path", ServerSettings.getInstance().getDicoogleDir());
144                allresponse.put("zip", ServerSettings.getInstance().isGzipStorage());
145                allresponse.put("effort", String.valueOf(ServerSettings.getInstance().getIndexerEffort()));
146                allresponse.put("thumbnail", ServerSettings.getInstance().getSaveThumbnails());
147                allresponse.put("thumbnailSize", String.valueOf(ServerSettings.getInstance().getThumbnailsMatrix()));
148                allresponse.put("watcher", ServerSettings.getInstance().isMonitorWatcher());
149                
150                resp.getWriter().write(allresponse.toString());
151                break;
152        }
153
154        resp.setContentType("application/json");
155        resp.getWriter().append(result);
156    }
157
158}