/* This file belongs to the Servoy development and deployment environment, Copyright (C) 1997-2010 Servoy BV This program is free software; you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program; if not, see http://www.gnu.org/licenses or write to the Free Software Foundation,Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 */ package com.servoy.j2db.persistence; import java.io.InputStream; import java.net.URL; import java.util.Properties; import java.util.Map.Entry; import com.servoy.j2db.util.Debug; @SuppressWarnings("nls") public class ClientMethodTemplatesLoader { public static final String JSEVENT_ARG_LOCATION_PREFIX = "method.template.jseventarg.location."; private static boolean loaded = false; private static final Object lock = new Object(); public static Object getLock() { return lock; } public static void setLoaded() { loaded = true; } public static synchronized void loadClientMethodTemplatesIfNeeded() { if (!loaded) { loaded = true; URL url = ClientMethodTemplatesLoader.class.getResource("doc/methodtemplates.properties"); //$NON-NLS-1$ try { InputStream is = url.openStream(); Properties properties = new Properties(); properties.load(is); is.close(); int counter = 0; for (Entry<Object, Object> entry : properties.entrySet()) { if (((String)entry.getKey()).startsWith(JSEVENT_ARG_LOCATION_PREFIX)) { String name = ((String)entry.getKey()).substring(JSEVENT_ARG_LOCATION_PREFIX.length()); if (MethodTemplate.COMMON_TEMPLATES.get(name) == null) // make sure we do not overwrite dev. loaded templates - as they contain more info - although it should never be != null because of the loaded flag { int argIndex = Integer.parseInt((String)entry.getValue()); MethodArgument[] args = new MethodArgument[argIndex + 1]; for (int i = 0; i < argIndex; i++) { args[i] = new MethodArgument(null, ArgumentType.Object, null); } args[argIndex] = new MethodArgument(null, ArgumentType.JSEvent, null); MethodTemplate mt = new MethodTemplate(null, null, args, null, false); MethodTemplate.COMMON_TEMPLATES.put(name, mt); counter++; } } } Debug.log("Loaded " + counter + " client method templates."); } catch (Exception e) { Debug.error(e); } } } }