package net.sourceforge.fenixedu; import java.io.UnsupportedEncodingException; import java.lang.reflect.Method; import dml.DomainClass; import dml.DomainModel; import dml.Slot; import net.sourceforge.fenixedu.domain.DomainObject; import net.sourceforge.fenixedu.domain.RootDomainObject; import jvstm.TransactionalCommand; import pt.ist.fenixframework.Config; import pt.ist.fenixframework.FenixFramework; import pt.ist.fenixframework.pstm.AbstractDomainObject; import pt.ist.fenixframework.pstm.Transaction; public class EncodingFixer { // // public static final String DOMAIN_OBJECT_CLASSNAME = "net.sourceforge.fenixedu.domain.DomainObject"; // public static final String STRING_TYPE = "java.lang.String"; // // public static void main(String[] args) { // FenixFramework.initialize(new Config() { // // }); // // DomainModel model = FenixFramework.getDomainModel(); // // for (DomainClass domainClass : model.getDomainClasses()) { // if (domainClass.getSuperclassName().equals(DOMAIN_OBJECT_CLASSNAME)) { // for (Slot slot : domainClass.getSlotsList()) { // // if (STRING_TYPE.equals(slot.getTypeName())) { // } // } // } // // } // // private static void fixObject(final String oid, final String slot) { // Transaction.withTransaction(new TransactionalCommand() { // // @Override // public void doIt() { // try { // DomainObject someDomainObject = AbstractDomainObject.fromExternalId(oid); // Method method = someDomainObject.getClass().getMethod("get" + slot, new Class[] {}); // String currentValue = (String) method.invoke(someDomainObject, new Object[] {}); // // String fixedValue = fix(currentValue); // // if (!fixedValue.equals(currentValue)) { // method = someDomainObject.getClass().getMethod("set" + slot, new Class[] { String.class }); // method.invoke(someDomainObject, new Object[] { fixedValue }); // } // } catch (Exception e) { // e.printStackTrace(); // } // } // // }); // } // // private static String decode(final String value, final String resultEncoding) throws UnsupportedEncodingException { // final byte[] bytes = value.getBytes(resultEncoding); // return new String(bytes); // } // // public static String fix(final String value) throws UnsupportedEncodingException { // final int nb = value.getBytes().length; // // final String decode1 = decode(value, "UTF-8"); // final String decode2 = decode(value, "ISO8859-1"); // final String decode3 = decode(value, "windows-1252"); // // final int l = value.length(); // final int l1 = decode1.length(); // final int l2 = decode2.length(); // final int l3 = decode3.length(); // // if (l < l1 && l < l2) { // return value; // } else if (decode1.getBytes().length <= nb && l1 <= l2 && l1 <= l3 && isValid(decode1)) { // return decode1; // } else if (decode2.getBytes().length <= nb && l2 <= l1 && l2 <= l3 && isValid(decode2)) { // return decode2; // } else if (decode3.getBytes().length <= nb && l3 <= l1 && l3 <= l2 && isValid(decode3)) { // return decode3; // } // return null; // } // // private static boolean isValid(final String string) { // for (final char c : string.toCharArray()) { // if (((int) c) == 65533) { // return false; // } // } // return true; // } }