Exemple d'interface Java
Cette section décrit :
*
*
*
L'interface IdValidate
package com.unicacorp.uap.common.template;
import java.util.HashMap;
/**
Cette interface doit être implémentée par l'utilisateur final d'un système
Marketing Operations
en vue de la validation de valeurs d'ID générées par le système
en fonction d'une logique métier.
Les implémentations de cette interface sont appelées par le serveur Marketing Operations.
*/
public interface IdValidate
{
/**
Renvoie true si les valeurs d'attribut spécifiées sont valides.
*
* @param id - ID du projet ou du programme courant. Il s'agit de la
valeur s'il s'agit d'un nouveau projet/programme.
* @param values - Ensemble de paires nom/valeur, qui référencent
une connexion de base de données courante, l'ID de
modèle approprié et une autre mappe de hachage qui contient
des paires nom/valeur, correspondant aux zones et
valeurs à l'écran.
* @return true - si valide ; sinon, renvoie false ou émet
une exception.
* @throws com.unicacorp.uap.user.IdValidateException
* Doit contenir une valeur de message qui décrit
le problème.
*/
public boolean isValid(int id, HashMap values) throws
IdValidateException;
/**
Nom de la clé de hachage transmise à IdValidate.isValid(..)
qui fait référence à une connexion de base de données courante aux tables du système
Marketing Operations.
Cette connexion est disponible pour les implémentations de cette
interface.
*/
public final String PLAN_DB_CONNECTION = "dbconnection";
/**
* Nom de la clé de hachage dans la mappe de hachage transmise à
idValidate.isValid(..) qui fait référence à l'ID du modèle
lié.
*/
public final String OBJECT_TEMPLATE_ID = "templateid";
/**
* Nom de la clé de hachage dans la mappe de hachage transmise à
* IdValidate.isValid(..) qui fait référence à une autre mappe de hachage
* qui contient des paires nom/valeur. Le nom correspond à une zone à
* l'écran pour le projet/programme et la valeur correspond au texte
* entré par l'utilisateur ou à la sélection.
*/
public final String OBJECT_ATTRIB_VALUES = "attributeValues";
}
L'interface IDGenerate
package com.unicaorp.uap.common.template;
import java.util.HashMap;
/* Cette interface doit être implémentée par l'utilisateur final
* d'un système
Marketing Operations
* pour la génération d'un code de projet unique (PID). L'objectif
* est de permettre aux utilisateurs de se connecter à des systèmes d'entreprise existants
* pour créer des ID de projet significatifs dans leur entreprise.
*
* Les implémentations de cette interface sont appelées par le serveur Marketing Operations.
* Le serveur Marketing Operations
* doit garantir qu'un ID seulement est généré à la fois.
* Lorsque l'implémentation de cette interface est appelée,
* on peut supposer qu'aucun autre ID n'est généré
* simultanément.
*/
public interface IdGenerate {
/**
* Renvoie un code de type chaîne utilisé pour définir un objet de projet avec
Marketing Operations
*
* @param uniqueId - Il s'agit d'une valeur entière générée par le système
* Marketing Operations. Son
* unicité est garantie sur le système ; par conséquent, si l'ID de projet
* renvoyé est la représentation sous forme de chaîne de cet entier, il s'agit d'un
* code de projet unique (PID).
*
* @param values - Il s'agit d'un ensemble de paires nom/valeur qui référencent
* une connexion de base de données, un ID de modèle approprié, un préfixe de code,
* un indicateur de demande, et une autre mappe de hachage contenant des paires
* nom/valeur, qui correspondent aux zones et aux valeurs à l'écran.
*
* @param uniqueChecker - Implémentation utilisée pour vérifier l'unicité
* de l'ID généré par cette instance.
*
* @return - Chaîne qui représente l'ID du projet que vous créez.
*
* @throws com.unicacorp.uap.user.IdGenerateException
* Doit contenir une valeur de message qui décrit
* le problème
*/
public String generateID (int uniqueId, HashMap values, IdUniqueChecker
uniqueChecker)
throws IdGenerateException;
/**
* Nom de la clé de hachage transmise à IdValidate.isValid(..)
* qui fait référence à une connexion de base de données courante aux tables du système
Marketing Operations.
* Cette connexion est disponible pour les implémentations de cette interface.
*/
public final String PLAN_DB_CONNECTION = "dbconnection";
/**
* Nom de la clé de hachage transmise à IdValidate.isValid(..)
* qui fait référence à l'ID du modèle lié.
*/
public final String OBJECT_TEMPLATE_ID = "templateid";
/**
* Nom de la clé de hachage transmise à IdValidate.isValid(..)
* qui fait référence au préfixe de chaîne souhaité pour ajouter l'ID généré.
*/
public final String OBJECT_CODE_PREFIX = "pidprefix";
/**
* Nom de la clé de hachage transmise à IdValidate.isValid(..)
* qui indique si l'objet appelant est une demande.
*/
public final String OBJECT_REQUEST_FLAG = "flagprojectrequest";
/**
* Nom de la clé de hachage dans la mappe de hachage transmise à IdValidate.isValid(..)
* qui fait référence à une autre mappe de hachage contenant des paires nom/valeur. Le nom
* correspond à une zone à l'écran pour le projet/programme et la valeur
* correspond au texte entré par l'utilisateur ou à la sélection.
*/
public final String OBJECT_ATTRIB_VALUES = "attributeValues";
/**
* Numéro de départ du code de plan de démarrage par défaut
*/
public final int PLAN_CODE_SUFFIX_START = 1000;
/**
* Numéro de départ du code de programme de démarrage par défaut
*/
public final int PROGRAM_CODE_SUFFIX_START = 1000;
/**
* Numéro de départ du code de projet de démarrage par défaut
*/
public final int PROJECT_CODE_SUFFIX_START = 1000;
/**
* Numéro de départ du code rfq de démarrage par défaut
*/
public final int RFQ_CODE_SUFFIX_START = 1000;}
Le générateur d'ID personnalisé
package com.unica.uap.component.helper;
import com.unicacorp.uap.common.db.*;
import com.unicacorp.uap.common.template.*;
import org.apache.commons.lang.StringUtils;
import java.io.File;
import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Properties;
/**
* La classe CustomComponentPidGenerateImpl.
*/
public class CustomComponentPidGenerateImpl implements IdGenerate,
IdUniqueChecker {
/** La limite inférieure. */
public static int LOWER_LIMIT = 0;
/** La limite supérieure. */
public static int UPPER_LIMIT = 0;
static {
Properties attrPro = new Properties();
try {
String planHome = System.getProperty("plan.home");
System.out.println("planHome : " + planHome);
File file = new File(planHome + "/unwar/WEB-INF/IDRange.properties");
FileInputStream fi = new FileInputStream(file);
if (fi != null) {
attrPro.load(fi);
String min = (String) attrPro.get("mktOBJId.min");
String max = (String) attrPro.get("mktOBJId.max");
LOWER_LIMIT = Integer.parseInt(min);
UPPER_LIMIT = Integer.parseInt(max);
System.out.println("Lower Limit :" + LOWER_LIMIT);
System.out.println("Upper Limit :" + UPPER_LIMIT);
} else {
System.out.println("IDRange Property file can not be found");
throw new RuntimeException("IDRange Property file can not be found");
}
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException("IDRange Property file can not be found");
}
}
/**
* Le constructeur.
*/
public CustomComponentPidGenerateImpl() {
}
/**
* Génération de l'ID.
*
* @param uniqueChecker le vérificateur d'unicité
* @param values les valeurs
* @param instanceId l'ID de l'instance
*
* @return la chaîne
*
* @throws IdGenerateException l'exception de génération d'ID
*/
public synchronized String generateID(int instanceId, HashMap values,
IdUniqueChecker uniqueChecker) throws IdGenerateException {
print("inside 'generateID' method");
print("instanceId : " + instanceId);
print("####################\n" + values + "####################\n");
String prefix = (String) values.get("pidprefix");
print("prefix : " + prefix);
String templateid = (String) values.get("templateid");
print("templateid : " + templateid);
Connection con = (Connection) values.get("dbconnection");
//int nextValue = -1;
boolean isEmptyPrefix = false;
try {
if (StringUtils.isEmpty(prefix)) {
isEmptyPrefix = true;
}
//OBTENIR LA VALEUR COURANTE DE L'ID DE MODULE - à partir de la table CUST_GENIDS
String sqlString = "SELECT ID_VALUE FROM CUST_GENIDS WHERE ENTITY_NAME = ?";
print("sqlString : " + sqlString);
PreparedStatement ps = null;
ResultSet rs = null;
int cnt = 0;
try {
ps = new UAPSQLPreparedStatement(con, sqlString);
UAPSQLUtils.setupPreparedStatement(ps, 1, templateid, "string");
rs = ps.executeQuery();
if (rs.next()) {
cnt = rs.getInt(1);
}
print("current ID vlaue :" + cnt);
UAPSQLUtils.closeResultSet(rs, ps);
} catch (SQLException ex) {
ex.printStackTrace();
UAPSQLUtils.closeResultSet(rs, ps);
throw new RuntimeException(ex);
} catch (Exception exception) {
exception.printStackTrace();
UAPSQLUtils.closeResultSet(rs, ps);
throw new RuntimeException(exception);
}
if (cnt == 0) {
//insérer le premier nouvel enregistrement pour l'ID de modèle dans la table
cnt = LOWER_LIMIT;
String sqlInsertStr = "INSERT INTO CUST_GENIDS values (?,?)";
print("sqlInsertStr : " + sqlInsertStr);
ps = new UAPSQLPreparedStatement(con, sqlInsertStr);
ps.setString(1, templateid);
ps.setInt(2, cnt);
}

else if ((cnt >= LOWER_LIMIT) && (cnt < UPPER_LIMIT)) {
//augmenter le compteur et mettre à jour la ligne de l'ID de modèle
cnt++;
String sqlUpdateStr =
"UPDATE CUST_GENIDS SET ID_VALUE= ? WHERE ENTITY_NAME = ?";
print("Update : " + sqlUpdateStr);
ps = new UAPSQLPreparedStatement(con, sqlUpdateStr);
ps.setInt(1, cnt);
ps.setString(2, templateid);
} else {
print("Current ID is out of range, ID Range [" + LOWER_LIMIT +
"-" + UPPER_LIMIT + "]");
//émettre une exception indiquant que l'ID ne peut pas être généré car la limite est dépassée
throw new IdGenerateException(
"Current ID is out of range, ID Range [" + LOWER_LIMIT +
"-" + UPPER_LIMIT + "]");
}
//UAPSQLUtils.beginTransaction(con);
ps.execute();
//UAPSQLUtils.endTransaction(con, true);
String pid = (isEmptyPrefix ? "" : prefix) + cnt;
print("return from 'generateID' method with pid : " + pid);
return pid;
} catch (Exception ex) {
ex.printStackTrace();
throw new IdGenerateException(ex);
}
}
/**
* Vérifie l'unicité.
*
* @param values les valeurs
* @param Id l'ID
*
* @return true, si unique
*/
public boolean isUnique(String Id, HashMap values) {
print("inside 'isUnique' method");
//fournir l'implémentation réelle pour la vérification d'unicité
return true;
}
/**
* Imprimer.
*
* @param str la chaîne
*/
private void print(String str) {
System.out.println(str);
}