001/**
002 *  '$Author: barseghian $'
003 *  '$Date: 2013-01-15 21:33:01 +0000 (Tue, 15 Jan 2013) $'
004 *  '$Revision: 31328 $'
005 *
006 *  For Details:
007 *  http://www.kepler-project.org
008 *
009 *  Copyright (c) 2009-2010 The Regents of the
010 *  University of California. All rights reserved. Permission is hereby granted,
011 *  without written agreement and without license or royalty fees, to use, copy,
012 *  modify, and distribute this software and its documentation for any purpose,
013 *  provided that the above copyright notice and the following two paragraphs
014 *  appear in all copies of this software. IN NO EVENT SHALL THE UNIVERSITY OF
015 *  CALIFORNIA BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL,
016 *  OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS
017 *  DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE
018 *  POSSIBILITY OF SUCH DAMAGE. THE UNIVERSITY OF CALIFORNIA SPECIFICALLY
019 *  DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
020 *  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE
021 *  SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF
022 *  CALIFORNIA HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES,
023 *  ENHANCEMENTS, OR MODIFICATIONS.
024 */
025
026package org.kepler.workflowrunmanager;
027
028import java.awt.Color;
029import java.awt.Font;
030import java.io.IOException;
031import java.util.ArrayList;
032import java.util.Arrays;
033import java.util.HashMap;
034import java.util.List;
035import java.util.Map;
036import java.util.Vector;
037
038import org.kepler.configuration.ConfigurationManager;
039import org.kepler.configuration.ConfigurationNamespace;
040import org.kepler.configuration.ConfigurationProperty;
041import org.kepler.objectmanager.repository.EcogridRepository;
042import org.kepler.objectmanager.repository.Repository;
043import org.kepler.objectmanager.repository.RepositoryManager;
044import org.kepler.util.ProvenanceStore;
045
046// singleton.
047public final class WRMDefaults {
048
049        static private WRMDefaults _instance = null;
050
051        static final public String moduleName = "workflow-run-manager";
052        
053    static final public ConfigurationProperty provenanceDefaultsProperty =
054        ConfigurationManager.getInstance().getProperty(
055        ConfigurationManager.getModule("provenance"), "provenance.defaultSettings");
056
057        static final public String TAGS = "Tags";
058        static final public String WORKFLOW_NAME = "Workflow Name";
059        static final public String START_TIME = "Run Date";
060        static final public String DURATION = "Duration";
061        static final public String USER = "User";
062        static final public String EXEC_ID = "Id";
063        static final public String DEFAULT = "default";
064        
065        static final public String RANGE_SEPARATOR = " - ";
066
067        // TODO these sizes should be derived from some official Kepler UI settings:
068        static final public int WRM_PANE_WIDTH = 800;
069        static final public int WRM_PANE_HEIGHT = 180;
070
071        static final public int WRM_FONT_SIZE = 11;
072        static final public Font WRM_FONT = new Font("LucidaGrande", Font.PLAIN,
073                        WRM_FONT_SIZE);
074        static final public int WRM_ROW_HEIGHT = 14;
075
076        // preferred column widths
077        static final public int TAGS_COLUMN_WIDTH = 270;
078        ///static final public int WORKFLOW_NAME_COLUMN_WIDTH = 120;
079        static final public int WORKFLOW_NAME_COLUMN_WIDTH = 140;
080        static final public int START_TIME_COLUMN_WIDTH = 150;
081        static final public int DURATION_COLUMN_WIDTH = 45;
082        static final public int USER_NAME_COLUMN_WIDTH = 40;
083        static final public int EXEC_ID_COLUMN_WIDTH = 20;
084
085        static final public int COLUMN_MARGIN = 2;
086        static final public Color TABLE_GRID_COLOR = Color.LIGHT_GRAY;
087        static final public boolean SHOW_VERTICAL_LINES = true;
088        static final public boolean SHOW_HORIZONTAL_LINES = false;
089        static final public Color ERROR_ROW_COLOR = new Color(255, 191, 207);
090        static final public Color ERROR_ROW_SELECTED_COLOR = new Color(150, 119, 211);
091        static final public Color IMPORTED_ROW_COLOR = new Color(255, 206, 255);
092        static final public Color IMPORTED_ROW_SELECTED_COLOR = new Color(51, 204, 255);
093        static final public Color PREVIEW_TEXT_COLOR = new Color(144, 144, 144);
094
095        //set to whatever is selected by provenanceStoresComboBox
096        private ProvenanceStore defaultProvenanceStore = 
097                new ProvenanceStore(provenanceDefaultsProperty);
098        
099        private Vector<ProvenanceStore> provenanceStores = null;
100        
101        // default column order:
102        //private static List<String> defaultColumnOrderList = new ArrayList<String>(
103        //      Arrays.asList(TAGS, WORKFLOW_NAME, START_TIME, DURATION, USER, EXEC_ID));
104        static private List<String> defaultColumnOrderList = new ArrayList<String>(
105                Arrays.asList(TAGS, WORKFLOW_NAME, START_TIME, DURATION, USER));
106        
107        public Map<String, String> DEFAULTSEARCHSTRING = new HashMap<String, String>();
108
109        private WRMDefaults() {
110                
111                DEFAULTSEARCHSTRING.put(TAGS, "click to enter search term");
112                DEFAULTSEARCHSTRING.put(WORKFLOW_NAME, "workflow search");
113                DEFAULTSEARCHSTRING.put(START_TIME, "> Jan 01, 2004 12:00:00 AM");
114                DEFAULTSEARCHSTRING.put(DURATION, "> 00:00:00");
115                DEFAULTSEARCHSTRING.put(USER, "username");
116                DEFAULTSEARCHSTRING.put(EXEC_ID, "> 0");
117                DEFAULTSEARCHSTRING.put(DEFAULT, "blank");
118                
119                // initialize the provenance stores (used by combobox)
120                try {
121                        provenanceStores = new Vector<ProvenanceStore>();
122                        RepositoryManager repositoryManager = RepositoryManager.getInstance();
123
124                        // first add the default local provenance store
125                        provenanceStores.add(defaultProvenanceStore);
126
127                        // now add all the ecogrid repositories
128                        ConfigurationNamespace remoteStoresNameSpace = new ConfigurationNamespace(
129                                        "remoteStores");
130                        for (Repository repo : repositoryManager.getRepositories()) {
131                                ConfigurationProperty provenanceProperty = ConfigurationManager
132                                                .getInstance().getProperty(
133                                                ConfigurationManager.getModule(moduleName),
134                                                remoteStoresNameSpace,
135                                                "repositories." + repo.getName());
136                                if (provenanceProperty != null
137                                                && repo instanceof EcogridRepository) {
138                                        ProvenanceStore provStore = new ProvenanceStore(
139                                                        provenanceProperty, (EcogridRepository) repo);
140                                        provenanceStores.add(provStore);
141                                }
142                        }
143                } catch (IOException e) {
144                        // TODO Auto-generated catch block
145                        e.printStackTrace();
146                } catch (Exception e) {
147                        // TODO Auto-generated catch block
148                        e.printStackTrace();
149                }
150
151        }
152
153        public synchronized static WRMDefaults getInstance() {
154                if (_instance == null) {
155                        _instance = new WRMDefaults();
156                }
157                return _instance;
158        }
159
160        public String getDefault(String key) {
161                if (DEFAULTSEARCHSTRING.containsKey(key)) {
162                        return DEFAULTSEARCHSTRING.get(key);
163                } else {
164                        System.out.println("ERROR no default for key:" + key);
165                        return DEFAULTSEARCHSTRING.get(DEFAULT);
166                }
167        }
168
169        public int getDefaultColIndex(String col) throws Exception {
170                if (defaultColumnOrderList.contains(col)) {
171                        return defaultColumnOrderList.indexOf(col);
172                }
173                throw new Exception("ERROR trying to get a default column that doesn't exist");
174        }
175
176        public String getDefaultSearchStringForColIndex(int col) {
177                try {
178                        return getDefault(defaultColumnOrderList.get(col));
179                } catch (IndexOutOfBoundsException ioobe) {
180                        ioobe.printStackTrace();
181                        return "%";
182                }
183        }
184
185        public boolean containsName(String name) {
186                if (DEFAULTSEARCHSTRING.containsValue(name)) {
187                        return true;
188                }
189                return false;
190        }
191
192        public int getColumnCount() {
193                return defaultColumnOrderList.size();
194        }
195
196        public Vector<ProvenanceStore> getProvenanceStores(){
197                return provenanceStores;
198        }
199        
200        public ProvenanceStore getDefaultProvenanceStore(){
201                return defaultProvenanceStore;
202        }
203        
204}