Skip to content
This repository has been archived by the owner on Feb 20, 2022. It is now read-only.

Commit

Permalink
enhanced var handling
Browse files Browse the repository at this point in the history
  • Loading branch information
klara authored and klara committed Sep 5, 2014
1 parent 89e0ce0 commit 94bcf81
Show file tree
Hide file tree
Showing 4 changed files with 104 additions and 66 deletions.
1 change: 0 additions & 1 deletion src/mpv5/db/common/DatabaseObject.java
Expand Up @@ -2513,7 +2513,6 @@ public synchronized void resolveValueProperties(final Map<String, Object> map) {
map.put("vpresolved@" + this, Boolean.TRUE);
List<ValueProperty> props = new ArrayList<ValueProperty>(ValueProperty.getProperties(this));
try {
System.err.println(getContext());
props.addAll(ValueProperty.getProperties(getContext(), getGroup()));
} catch (Exception ex) {
Log.Debug(this, ex.getMessage());
Expand Down
7 changes: 3 additions & 4 deletions src/mpv5/handler/FormFieldsHandler.java
Expand Up @@ -53,14 +53,13 @@ public FormFieldsHandler(DatabaseObject obj) {
* @return A HashMap<key,value/>
*/
public synchronized Map<String, Object> getFormFields() {
TreeMap<String, Object> map = new TreeMap<String, Object>();
HashMap<String, Object> map = new HashMap<String, Object>();

if (obj != null) {
obj.resolveValueProperties(map);
List<Object[]> m = obj.getValues2();
map = new TreeMap<String, Object>();
for (int i = 0; i < m.size(); i++) {
Object[] vals = m.get(i);
map = new HashMap<String, Object>();
for (Object[] vals : m) {
if (vals[1] == null) {
vals[1] = "";
}
Expand Down
148 changes: 91 additions & 57 deletions src/mpv5/handler/VariablesHandler.java
Expand Up @@ -18,7 +18,11 @@

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import mpv5.db.common.Context;
Expand All @@ -33,7 +37,6 @@
import mpv5.db.objects.User;
import mpv5.globals.Messages;
import mpv5.logging.Log;
import mpv5.ui.dialogs.Notificator;
import mpv5.utils.date.DateConverter;
import mpv5.utils.numberformat.FormatNumber;

Expand All @@ -42,7 +45,7 @@
*/
public abstract class VariablesHandler {

private static Pattern SCRIPTPATTERN = Pattern.compile("\\#(.*?)\\#");
private static final Pattern SCRIPTPATTERN = Pattern.compile("\\#(.*?)\\#");
//generic

/**
Expand Down Expand Up @@ -73,8 +76,8 @@ public String toString() {
return val;
}
}
public static enum GENERIC_VARS_FORMAT{

public static enum GENERIC_VARS_FORMAT {

YEAR("[YEAR]"),
MONTH("[MONTH]"),
Expand All @@ -97,16 +100,18 @@ public String toString() {
//special
/**
* Determines the specific variables for the given {@link DatabaseObject}
*
* @param target
* @return
* @deprecated
*/
public static String[] getSpecialVarsOf(DatabaseObject target) {
List<String[]> vars = target.getValues();
String[] svars = new String[vars.size()];
if (!(target instanceof SubItem)) {//No subitems, takes ages
for (int i = 0; i < vars.size(); i++) {
String[] method = vars.get(i);
svars[i] = "[" + method[0].toUpperCase() + "]";
svars[i] = "[" + method[0] + "]";
}
} else {
return new String[0];
Expand All @@ -115,20 +120,27 @@ public static String[] getSpecialVarsOf(DatabaseObject target) {
}

/**
* Generates an array containing all available variables and values for the specific {@link DatabaseObject}
* Generates an array containing all available variables and values for the
* specific {@link DatabaseObject}
*
* @param target
* @return
*/
// private static DatabaseObject old;
public static synchronized List<String[]> resolveVarsFor(final DatabaseObject target) {
//
// if (target.equals(old)) {
// return null;
// }
// old = target;
return resolveVarsFor(target, Collections.EMPTY_MAP);
}

/**
* Generates an array containing all available variables and values for the
* specific {@link DatabaseObject}
*
* @param target
* @param preResolvedVars
* @return
*/
public static synchronized List<String[]> resolveVarsFor(final DatabaseObject target, Map preResolvedVars) {
Log.Debug(VariablesHandler.class, "..................>\n\n" + preResolvedVars);
Log.Debug(VariablesHandler.class, "Resolving vars for " + target.getContext() + "#" + target.__getIDS() + ".." + target.getClass());
Log.Debug(target, (target instanceof Item));

List<String[]> vars = new ArrayList<String[]>();
GENERIC_VARS[] gens = GENERIC_VARS.values();
Expand Down Expand Up @@ -163,46 +175,53 @@ public static synchronized List<String[]> resolveVarsFor(final DatabaseObject ta
} else if (varName.equals(GENERIC_VARS.DAY.toString())) {
varValue = DateConverter.getDayOfMonth();
}
} catch (Exception nodataFoundException) {
} catch (Exception ex) {
Log.Debug(VariablesHandler.class, ex.getMessage());
}
vars.add(new String[]{varName, varValue});
}
String[] specs = getSpecialVarsOf(target);
int j;
//String[] specs = getSpecialVarsOf(target);//fixme evt remove
//Log.Debug(VariablesHandler.class, "..xxxx>\n\n" + Arrays.asList(specs));

Iterator iterator = preResolvedVars.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry mapEntry = (Map.Entry) iterator.next();
vars.add(new String[]{"["+String.valueOf(mapEntry.getKey())+"]", String.valueOf(mapEntry.getValue())});
}
/*int j;
for (j = 0; j < specs.length; j++) {
String varName = specs[j];
String varValue = "";
List<String[]> vals;
vals = target.getValues();
for (int k = 0; k < vals.size(); k++) {
String[] value = vals.get(k);
for (String[] value : vals) {
if (value[0].equalsIgnoreCase(varName.substring(1, varName.length() - 1))) {
varValue = value[1];
}
}
vars.add(new String[]{varName, varValue});
}
}*/

if (target instanceof Item) {
/*if (target instanceof Item) {
try {
Contact c = (Contact) DatabaseObject.getObject(Context.getContact(), ((Item) target).__getContactsids());
vars.add(new String[]{"[contact.cname]".toUpperCase(), c.__getCname()});
vars.add(new String[]{"[contact.cnumber]".toUpperCase(), c.__getCNumber()});
vars.add(new String[]{"[contact.company]".toUpperCase(), c.__getCompany()});
vars.add(new String[]{"[contact.prename]".toUpperCase(), c.__getPrename()});
vars.add(new String[]{"[contact.title]".toUpperCase(), c.__getTitle()});
vars.add(new String[]{"[contact.country]".toUpperCase(), c.__getCountry()});
vars.add(new String[]{"[grosvaluef]".toUpperCase(), FormatNumber.formatLokalCurrency(((Item) target).__getTaxvalue().doubleValue() + ((Item) target).__getNetvalue().doubleValue())});
vars.add(new String[]{"[type]".toUpperCase(), Item.getTypeString(((Item) target).__getInttype())});
vars.add(new String[]{"[contact.cname]", c.__getCname()});
vars.add(new String[]{"[contact.cnumber]", c.__getCNumber()});
vars.add(new String[]{"[contact.company]", c.__getCompany()});
vars.add(new String[]{"[contact.prename]", c.__getPrename()});
vars.add(new String[]{"[contact.title]", c.__getTitle()});
vars.add(new String[]{"[contact.country]", c.__getCountry()});
vars.add(new String[]{"[grosvaluef]", FormatNumber.formatLokalCurrency(((Item) target).__getTaxvalue().doubleValue() + ((Item) target).__getNetvalue().doubleValue())});
vars.add(new String[]{"[type]", Item.getTypeString(((Item) target).__getInttype())});
if (c.__getisMale()) {
vars.add(new String[]{"[contact.gender]".toUpperCase(), Messages.CONTACT_TYPE_MALE.getValue()});
vars.add(new String[]{"[contact.intro]".toUpperCase(), Messages.CONTACT_INTRO_MALE.getValue()});
vars.add(new String[]{"[contact.gender]", Messages.CONTACT_TYPE_MALE.getValue()});
vars.add(new String[]{"[contact.intro]", Messages.CONTACT_INTRO_MALE.getValue()});
} else {
vars.add(new String[]{"[contact.gender]".toUpperCase(), Messages.CONTACT_TYPE_FEMALE.getValue()});
vars.add(new String[]{"[contact.intro]".toUpperCase(), Messages.CONTACT_INTRO_FEMALE.getValue()});
vars.add(new String[]{"[contact.gender]", Messages.CONTACT_TYPE_FEMALE.getValue()});
vars.add(new String[]{"[contact.intro]", Messages.CONTACT_INTRO_FEMALE.getValue()});
}
} catch (NodataFoundException ex) {
Expand All @@ -213,12 +232,12 @@ public static synchronized List<String[]> resolveVarsFor(final DatabaseObject ta
if (target instanceof Conversation) {
try {
Contact c = (Contact) DatabaseObject.getObject(Context.getContact(), ((Conversation) target).__getContactsids());
vars.add(new String[]{"[contact.cname]".toUpperCase(), c.__getCname()});
vars.add(new String[]{"[contact.company]".toUpperCase(), c.__getCompany()});
vars.add(new String[]{"[contact.prename]".toUpperCase(), c.__getPrename()});
vars.add(new String[]{"[contact.title]".toUpperCase(), c.__getTitle()});
vars.add(new String[]{"[contact.country]".toUpperCase(), c.__getCountry()});
vars.add(new String[]{"[type]".toUpperCase(), Messages.TYPE_CONVERSATION.toString()});
vars.add(new String[]{"[contact.cname]", c.__getCname()});
vars.add(new String[]{"[contact.company]", c.__getCompany()});
vars.add(new String[]{"[contact.prename]", c.__getPrename()});
vars.add(new String[]{"[contact.title]", c.__getTitle()});
vars.add(new String[]{"[contact.country]", c.__getCountry()});
vars.add(new String[]{"[type]", Messages.TYPE_CONVERSATION.toString()});
} catch (NodataFoundException ex) {
Log.Debug(VariablesHandler.class, ex.getMessage());
Expand All @@ -229,44 +248,59 @@ public static synchronized List<String[]> resolveVarsFor(final DatabaseObject ta
try {
Contact c = (Contact) DatabaseObject.getObject(Context.getContact(), ((ActivityList) target).__getContactsids());
vars.add(new String[]{"[contact.cname]".toUpperCase(), c.__getCname()});
vars.add(new String[]{"[contact.company]".toUpperCase(), c.__getCompany()});
vars.add(new String[]{"[contact.prename]".toUpperCase(), c.__getPrename()});
vars.add(new String[]{"[contact.title]".toUpperCase(), c.__getTitle()});
vars.add(new String[]{"[contact.country]".toUpperCase(), c.__getCountry()});
vars.add(new String[]{"[type]".toUpperCase(), Messages.TYPE_ACTIVITY.toString()});
vars.add(new String[]{"[contact.cname]", c.__getCname()});
vars.add(new String[]{"[contact.company]", c.__getCompany()});
vars.add(new String[]{"[contact.prename]", c.__getPrename()});
vars.add(new String[]{"[contact.title]", c.__getTitle()});
vars.add(new String[]{"[contact.country]", c.__getCountry()});
vars.add(new String[]{"[type]", Messages.TYPE_ACTIVITY.toString()});
} catch (NodataFoundException ex) {
Log.Debug(VariablesHandler.class, ex.getMessage());
}
}
}*/

for (int k = 0; k < vars.size(); k++) {
String[] strings = vars.get(k);
Log.Debug(target, Arrays.asList(strings));
if (Log.isDebugging()) {
for (String[] strings : vars) {
Log.Debug(target, Arrays.asList(strings));
}
}

return vars;
}

/**
* Replaces each variable in the text with the according values from the {@link DatabaseObject}
* and evaluates scripts
* Replaces each variable in the text with the according values from the
* {@link DatabaseObject} and evaluates scripts
*
* @param text
* @param source
* @return
*/
public static synchronized String parse(String text, final DatabaseObject source) {
List<String[]> c = resolveVarsFor(source);
return parse(text, source, Collections.EMPTY_MAP);
}

/**
* Replaces each variable in the text with the according values from the
* {@link DatabaseObject} and evaluates scripts
*
* @param text
* @param source
* @param preResolvedVars
* @return
*/
public static synchronized String parse(String text, final DatabaseObject source, Map preResolvedVars) {
List<String[]> c = resolveVarsFor(source, preResolvedVars);
if (c != null) {
for (int i = 0; i < c.size(); i++) {
String[] data = c.get(i);
for (String[] data : c) {
if (data != null) {
if (Log.getLoglevel() == Log.LOGLEVEL_DEBUG) {
Log.Debug(VariablesHandler.class, source + ": replacing key: " + data[0] + " with value: " + data[1]);
}
if (data[1] != null) {
text = text.replace(data[0], data[1]);
if (Log.isDebugging()) {
Log.Debug(VariablesHandler.class, source + ": replacing key: " + data[0] + " with value: " + data[1]);
}
//text = text.replace(data[0], data[1]);
text = text.replaceAll("(?i)" + data[0].replace("[", "\\[").replace("]", "\\]"), data[1]);//.replace(".","\\.") regex escape..
}
}
}
Expand Down
14 changes: 10 additions & 4 deletions src/mpv5/utils/export/Export.java
Expand Up @@ -34,6 +34,8 @@
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.swing.SwingUtilities;
import mpv5.db.common.Context;
import mpv5.db.common.DatabaseObject;
Expand Down Expand Up @@ -65,6 +67,7 @@
public final class Export extends HashMap<String, Object> implements Waitable {

private static final long serialVersionUID = 1L;
private static final String EMAIL_PATTERN = "^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";

/**
* Mail a template
Expand Down Expand Up @@ -98,7 +101,10 @@ public static void mail(Template preloadedTemplate, DatabaseObject dataOwner, Co

try {
Contact cont = to;
if (mpv5.db.objects.User.getCurrentUser().__getMail().contains("@") && mpv5.db.objects.User.getCurrentUser().__getMail().contains(".") && cont.__getMailaddress().contains("@") && cont.__getMailaddress().contains(".")) {
if (mpv5.db.objects.User.getCurrentUser().__getMail() != null
&& cont.__getMailaddress() != null
&& Pattern.matches(EMAIL_PATTERN, mpv5.db.objects.User.getCurrentUser().__getMail())
&& Pattern.matches(EMAIL_PATTERN, cont.__getMailaddress())) {
SimpleMail pr = new SimpleMail();
pr.setMailConfiguration(mpv5.db.objects.User.getCurrentUser().getMailConfiguration());
pr.setRecipientsAddress(cont.__getMailaddress());
Expand All @@ -117,8 +123,8 @@ public static void mail(Template preloadedTemplate, DatabaseObject dataOwner, Co
}

if (m != null && m.__getCname() != null) {
pr.setSubject(VariablesHandler.parse(m.__getCname(), dataOwner));
pr.setText(VariablesHandler.parse(m.__getDescription(), dataOwner));
pr.setSubject(VariablesHandler.parse(m.__getCname(), dataOwner, hm1));
pr.setText(VariablesHandler.parse(m.__getDescription(), dataOwner, hm1));
}
try {
new Job(ex, (Waiter) pr).execute();
Expand Down Expand Up @@ -260,7 +266,6 @@ private static File mergeFiles(List<File> p) {
int totalPages = 0;
Iterator<InputStream> iteratorPDFs = pdfs.iterator();


while (iteratorPDFs.hasNext()) {
InputStream pdf = iteratorPDFs.next();
PdfReader pdfReader = new PdfReader(pdf);
Expand Down Expand Up @@ -582,4 +587,5 @@ public void setTargetFile(File toFile) {
public File getTargetFile() {
return toFile;
}

}

0 comments on commit 94bcf81

Please sign in to comment.