--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javaextensions/midppush/javasrc/com/nokia/mj/impl/push/PushValidatorLoader.java Tue Apr 27 16:30:29 2010 +0300
@@ -0,0 +1,140 @@
+/*
+* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+
+package com.nokia.mj.impl.push;
+
+import java.io.IOException;
+import com.nokia.mj.impl.gcf.PushValidator;
+import com.nokia.mj.impl.utils.Uid;
+import com.nokia.mj.impl.utils.Logger;
+import java.lang.String;
+import java.lang.StringBuffer;
+import javax.microedition.io.ConnectionNotFoundException;
+import java.lang.ClassNotFoundException;
+import java.lang.IllegalArgumentException;
+import java.lang.IllegalAccessException;
+import java.lang.InstantiationException;
+import java.util.Hashtable;
+
+/**
+ * This class parses scheme from URI, loads protocol instance of specific PushValidator interface
+ * and validates URI and 'filter' arguments passed as arguments to PushRegistry.registerConnection()
+ * operation or read from .jad/.jar files(= static push registration).
+ * Protocol specific validator is searched from com.nokia.mj.impl.gcf.protocol.XXX' package. XXX means
+ * scheme of the protocol(e.g. 'com.nokia.mj.impl.gcf.protocol.http') and name of the implementation
+ * class must be PushValidatorImpl.
+ */
+final class PushValidatorLoader
+{
+ private static final String PROTOCOL_PACKAGE_PATH = "com.nokia.mj.impl.gcf.protocol.";
+ private static final String NAME_OF_VALIDATOR_CLASS = ".PushValidatorImpl";
+ private static PushValidatorLoader sValidatorLoaderObj = null;
+
+ Hashtable mValidatorContainer = null;
+
+ public PushValidatorLoader()
+ {
+ mValidatorContainer = new Hashtable();
+ }
+
+ public static synchronized PushValidatorLoader getInstance()
+ {
+ if (null == sValidatorLoaderObj)
+ sValidatorLoaderObj = new PushValidatorLoader();
+ return sValidatorLoaderObj;
+ }
+
+ /**
+ * This operation parses scheme from URI, loads protocol instance of specific PushValidator interface
+ * and validates URI and 'filter' arguments.
+ * @param aUri push URI.
+ * @param aFilter 'filter' argument of the push registration.
+ * @param aSuiteUid MIDlet suite uid.
+ * @param aMidletName name of the MIDlet.
+ * @param aIsStaticRegistration indicates whether static/dynamic push registration is ongoing.
+ * @throws IllegalArgumentException if URI is not valid.
+ * ConnectionNotFoundException if validation class can not be loaded.
+ */
+ public void validatePushArguments(String aUri,String aFilter,Uid aSuiteUid,
+ String aMidletName,
+ boolean aIsStaticRegistration)
+ throws ConnectionNotFoundException, IOException
+ {
+ Logger.LOG(Logger.EJavaPush,Logger.EInfo,"+ PushValidatorLoader.validatePushArguments()");
+
+ try
+ {
+ if ((null == aUri) || (null == aFilter))
+ throw new IllegalArgumentException("URI/filter argument is null");
+
+ if ((true == aUri.equals("")) || (true == aFilter.equals("")))
+ throw new IllegalArgumentException("URI/filter argument string is empty");
+
+ PushValidator validatorInstance = getPushValidator(aUri);
+ validatorInstance.validate(aUri,aFilter,aSuiteUid,aMidletName,aIsStaticRegistration);
+
+ Logger.LOG(Logger.EJavaPush,Logger.EInfo,"- PushValidatorLoader.validatePushArguments()");
+ }
+ catch (ClassNotFoundException ex)
+ {
+ throw new ConnectionNotFoundException("Unsupported URI scheme");
+ }
+ catch (IllegalAccessException ex)
+ {
+ throw new ConnectionNotFoundException("Validator class of the URI is not accessible");
+ }
+ catch (InstantiationException ex)
+ {
+ throw new ConnectionNotFoundException("Validator object of the URI can not be instantiated");
+ }
+ }//end validatePushArguments
+
+ /**
+ *
+ */
+ private PushValidator getPushValidator(String aUri)
+ throws ClassNotFoundException, IllegalAccessException, InstantiationException
+ {
+ //Resolve scheme from the URI.
+ int index = aUri.indexOf(':');
+ if (-1 == index)
+ throw new IllegalArgumentException("Uri is not valid");
+ String schemeStr = aUri.substring(0,index);
+ if (true == schemeStr.equals("secure-element"))
+ schemeStr = "secureelement";
+
+ PushValidator validatorObj = (PushValidator) mValidatorContainer.get(schemeStr);
+ if (null != validatorObj)
+ return validatorObj;
+
+ StringBuffer nameOfValidatorClass = new StringBuffer(PROTOCOL_PACKAGE_PATH.length()
+ + schemeStr.length()
+ + NAME_OF_VALIDATOR_CLASS.length());
+ nameOfValidatorClass.append(PROTOCOL_PACKAGE_PATH);
+ nameOfValidatorClass.append(schemeStr);
+ nameOfValidatorClass.append(NAME_OF_VALIDATOR_CLASS);
+ Class clazz = Class.forName(nameOfValidatorClass.toString());
+ validatorObj = (PushValidator) clazz.newInstance();
+
+ mValidatorContainer.put(schemeStr,validatorObj);
+ return validatorObj;
+ }//end getPushValidator
+
+
+}//end PushValidatorLoader
+