Example usage for com.mongodb BasicDBList BasicDBList

List of usage examples for com.mongodb BasicDBList BasicDBList

Introduction

In this page you can find the example usage for com.mongodb BasicDBList BasicDBList.

Prototype

BasicDBList

Source Link

Usage

From source file:org.alfresco.bm.test.mongo.MongoTestDAO.java

License:Open Source License

/**
 * Create a new test by copying an existing test.
 * <p/>/* w  w  w .j  a va 2 s . c om*/
 * All property overrides will be copied, which is where the value really
 * lies.
 * Test runs are not copied.
 * 
 * @param name
 *        a globally-unique name using
 *        {@link ConfigConstants#TEST_NAME_REGEX}
 * @param release
 *        the test definition software release or <tt>null</tt> to use the
 *        same release as the source test
 * @param schema
 *        the schema number or <tt>null</tt> to use the same schema as the
 *        source test
 * @param copyOfTest
 *        the test name to copy
 * @param copyOfVersion
 *        the version of the test to copy
 * @return <tt>true</tt> if the test was copied or <tt>false</tt> if not
 */
public boolean copyTest(String test, String release, Integer schema, String copyOfTest, int copyOfVersion) {
    // Get the test
    DBObject copyOfTestObj = getTest(copyOfTest, true);
    if (copyOfTestObj == null || !Integer.valueOf(copyOfVersion).equals(copyOfTestObj.get(FIELD_VERSION))) {
        logger.warn("Did not find test to copy: " + test + " (V" + copyOfVersion + ")");
        return false;
    }
    if (release == null) {
        // Use the source test release
        release = (String) copyOfTestObj.get(FIELD_RELEASE);
    }
    if (schema == null) {
        schema = (Integer) copyOfTestObj.get(FIELD_SCHEMA);
    }
    String description = (String) copyOfTestObj.get(FIELD_DESCRIPTION);

    // Copy the test
    if (!createTest(test, description, release, schema)) {
        logger.warn("Failed to create a test via copy: " + test);
        return false;
    }

    // Get the properties to copy
    BasicDBList copyOfPropObjs = (BasicDBList) copyOfTestObj.get(FIELD_PROPERTIES);
    if (copyOfPropObjs == null) {
        copyOfPropObjs = new BasicDBList();
    }
    for (Object obj : copyOfPropObjs) {
        DBObject copyPropObj = (DBObject) obj;
        Integer copyPropVer = (Integer) copyPropObj.get(FIELD_VERSION);
        if (copyPropVer == null || copyPropVer.intValue() <= 0) {
            // There has been no override
            continue;
        }
        String propName = (String) copyPropObj.get(FIELD_NAME);
        // Is this property present in the new test (might be copying
        // between releases)
        if (getProperty(test, null, propName) == null) {
            // The new test does not have the property so do not import the
            // overridden value
            continue;
        }

        String propValue = (String) copyPropObj.get(FIELD_VALUE);
        Integer versionZero = Integer.valueOf(0);
        this.setPropertyOverride(test, null, propName, versionZero, propValue);
    }
    // Done
    if (logger.isDebugEnabled()) {
        logger.debug("Copied test: \n" + "   From Test: " + copyOfTest + "\n" + "   New Test:  " + test);
    }
    return true;
}

From source file:org.alfresco.bm.test.mongo.MongoTestDAO.java

License:Open Source License

/**
 * Create a new test run by copying an existing test run.
 * <p/>//  w w w  .  ja v a 2 s  .  c  om
 * All property overrides will be copied, which is where the value really
 * lies.
 * 
 * @param test
 *        the name of the test to which the run belongs
 * @param run
 *        a test-unique name using {@link ConfigConstants#RUN_NAME_REGEX}
 * @param copyOfRun
 *        the test run name to copy
 * @param copyOfVersion
 *        the version of the test run to copy
 * @return <tt>true</tt> if the test run was copied or <tt>false</tt> if not
 */
public boolean copyTestRun(String test, String run, String copyOfRun, int copyOfVersion) {
    // Get the test
    DBObject testObj = getTest(test, false);
    if (testObj == null) {
        // The test no longer exists, so the run effectively doesn't either
        logger.warn("Test not found: " + test);
        return false;
    }
    // Get the test run
    DBObject copyOfTestRunObj;
    try {
        copyOfTestRunObj = getTestRun(test, copyOfRun, true);
    } catch (ObjectNotFoundException e) {
        copyOfTestRunObj = null;
    }

    if (copyOfTestRunObj == null
            || !Integer.valueOf(copyOfVersion).equals(copyOfTestRunObj.get(FIELD_VERSION))) {
        logger.warn("Did not find test run to copy: " + test + "." + copyOfRun + " (V" + copyOfVersion + ")");
        return false;
    }
    String description = (String) copyOfTestRunObj.get(FIELD_DESCRIPTION);
    // Copy the test run
    if (!createTestRun(test, run, description)) {
        logger.warn("Failed to create a test run via copy: " + test + "." + run);
        return false;
    }

    // Get the properties to copy
    BasicDBList copyOfPropObjs = (BasicDBList) copyOfTestRunObj.get(FIELD_PROPERTIES);
    if (copyOfPropObjs == null) {
        copyOfPropObjs = new BasicDBList();
    }
    for (Object obj : copyOfPropObjs) {
        DBObject copyPropObj = (DBObject) obj;
        Integer copyPropVer = (Integer) copyPropObj.get(FIELD_VERSION);
        if (copyPropVer == null || copyPropVer.intValue() <= 0) {
            // There has been no override
            continue;
        }
        String copyPropOrigin = (String) copyPropObj.get(FIELD_ORIGIN);
        if (!TestPropertyOrigin.RUN.name().equals(copyPropOrigin)) {
            // We also don't copy values that did not originate in the test
            // run
            continue;
        }
        String propName = (String) copyPropObj.get(FIELD_NAME);
        String propValue = (String) copyPropObj.get(FIELD_VALUE);
        Integer versionZero = Integer.valueOf(0);
        this.setPropertyOverride(test, run, propName, versionZero, propValue);
    }
    // Done
    if (logger.isDebugEnabled()) {
        logger.debug("Copied test run: \n" + "   Test:     " + test + "\n" + "   From Run: " + copyOfRun + "\n"
                + "   New Run:  " + run);
    }
    return true;
}

From source file:org.alfresco.bm.test.mongo.MongoTestDAO.java

License:Open Source License

/**
 * Create a new test run//from   w w  w  . ja v  a 2s. c o m
 * 
 * @param test
 *        the name of the test to which the run belongs
 * @param run
 *        a test-unique name using {@link ConfigConstants#RUN_NAME_REGEX}
 * @param description
 *        any description
 * @return <tt>true</tt> if the test run was written other <tt>false</tt> if
 *         not
 */
public boolean createTestRun(String test, String run, String description) {
    if (run == null || run.length() == 0) {
        throw new IllegalArgumentException("Name length must be non-zero");
    }
    Pattern pattern = Pattern.compile(RUN_NAME_REGEX);
    Matcher matcher = pattern.matcher(run);
    if (!matcher.matches()) {
        throw new IllegalArgumentException("The test run name '" + run + "' is invalid.  "
                + "Test run names may contain only characters, numbers or underscore.");
    }

    DBObject testObj = getTest(test, false);
    if (testObj == null) {
        // The test no longer exists, so the run effectively doesn't either
        logger.warn("Test not found: " + test);
        return false;
    }
    ObjectId testObjId = (ObjectId) testObj.get(FIELD_ID);

    // There are no properties to start with
    DBObject writeObj = BasicDBObjectBuilder.start().add(FIELD_TEST, testObjId).add(FIELD_NAME, run)
            .add(FIELD_VERSION, Integer.valueOf(0)).add(FIELD_DESCRIPTION, description)
            .add(FIELD_STATE, TestRunState.NOT_SCHEDULED.toString()).add(FIELD_SCHEDULED, Long.valueOf(-1L))
            .add(FIELD_STARTED, Long.valueOf(-1L)).add(FIELD_STOPPED, Long.valueOf(-1L))
            .add(FIELD_COMPLETED, Long.valueOf(-1L)).add(FIELD_DURATION, Long.valueOf(0L))
            .add(FIELD_PROGRESS, Double.valueOf(0.0D)).add(FIELD_RESULTS_SUCCESS, Long.valueOf(0L))
            .add(FIELD_RESULTS_FAIL, Long.valueOf(0L)).add(FIELD_RESULTS_TOTAL, Long.valueOf(0L))
            .add(FIELD_SUCCESS_RATE, Double.valueOf(1.0)).add(FIELD_DRIVERS, new BasicDBList()) // Ensure we
            // have an
            // empty
            // list to
            // start
            .get();

    try {
        WriteResult result = testRuns.insert(writeObj);
        if (logger.isDebugEnabled()) {
            logger.debug("Created test run: " + result + "\n" + "   Test:    " + test + "\n" + "   Name:    "
                    + run + "\n" + "   Descr:   " + description);
        }
        return true;
    } catch (DuplicateKeyException e) {
        if (logger.isDebugEnabled()) {
            logger.debug("Test run exists: " + test + ". " + run);
        }
        return false;
    }
}

From source file:org.alfresco.bm.test.mongo.MongoTestDAO.java

License:Open Source License

/**
 * Convert the map entries into a collection of DBObjects
 *///from  www  .  java  2 s .co m
private static BasicDBList getPropertyList(Map<String, DBObject> propsMap) {
    BasicDBList list = new BasicDBList();
    for (DBObject propObj : propsMap.values()) {
        list.add(propObj);
    }
    return list;
}

From source file:org.alfresco.bm.test.mongo.MongoTestDAO.java

License:Open Source License

public DBObject importTestRun(String testName, String runName, DBObject importObj) {
    // create return object
    DBObject resultObj = new BasicDBObject();
    String message = "Import succeeded.";
    ImportResult result = ImportResult.OK;

    try {/*from  www  . j  a  v a  2 s .  c o m*/
        ArgumentCheck.checkMandatoryString(testName, "testName");
        ArgumentCheck.checkMandatoryString(runName, "runName");
        ArgumentCheck.checkMandatoryObject(importObj, "importObj");

        // get object IDs
        ObjectId testObjId = getTestId(testName);
        ObjectId runObjId = getTestRunId(testObjId, runName);
        if (null == testObjId) {
            throw new ObjectNotFoundException(testName + "." + runName);
        }

        // get test definition
        DBObject queryObj = QueryBuilder.start(FIELD_ID).is(testObjId).get();
        BasicDBObjectBuilder fieldsObjBuilder = BasicDBObjectBuilder.start(FIELD_NAME, 1)
                .add(FIELD_RELEASE, true).add(FIELD_SCHEMA, true);
        DBObject fieldsObj = fieldsObjBuilder.get();

        DBObject testObj = tests.findOne(queryObj, fieldsObj);
        if (testObj == null) {
            throw new ObjectNotFoundException(testName + "." + runName);
        }

        // get values from test
        String release = (String) testObj.get(FIELD_RELEASE);
        Object tmp = testObj.get(FIELD_SCHEMA);
        Integer schema = null == tmp ? 0 : Integer.valueOf(tmp.toString());

        // get properties
        Map<String, DBObject> mapProps = getTestRunPropertiesMap(testObjId, runObjId, testName, runName);

        // get values from the import object
        Object relObj = importObj.get(FIELD_RELEASE);
        Object schemaObj = importObj.get(FIELD_SCHEMA);
        if (null != relObj && !relObj.toString().equals(release)) {
            result = ImportResult.WARN;
            message += "\r\nWARN: Release '" + release + "' from test to import doesn't match import release '"
                    + relObj.toString() + "'!";
        }
        if (null != schemaObj && !schemaObj.toString().equals(schema.toString())) {
            result = ImportResult.WARN;
            message += "\r\nWARN: Schema '" + schema + "' from test to import doesn't match import schema '"
                    + schemaObj.toString() + "'!";
        }

        // decrypt all values in the properties 
        // separate from set value - might throw exception and nothing should be changed if
        BasicDBList propsListEnc = (BasicDBList) importObj.get(FIELD_PROPERTIES);
        BasicDBList propsListDec = new BasicDBList();
        for (final Object obj : propsListEnc) {
            final DBObject dbObj = (DBObject) obj;
            String propName = (String) dbObj.get(FIELD_NAME);

            // decrypt
            DBObject prop = decryptPropertyValue(dbObj, propName);
            propsListDec.add(prop);
        }

        // again a loop and update the values 
        for (final Object objProp : propsListDec) {
            // get property
            final DBObject dbObj = (DBObject) objProp;
            String propName = (String) dbObj.get(FIELD_NAME);

            // get oldProperty
            final DBObject oldProp = mapProps.get(propName);
            if (null == oldProp) {
                result = ImportResult.WARN;
                message += "\r\nWARN: Ignored property '" + propName + "' not found";
            } else {
                // see if the value differs
                String oldValue = getPropValueAsString(oldProp);
                String newValue = getPropValueAsString(dbObj);
                if (!oldValue.equals(newValue)) {
                    // update property
                    updateProperty(testName, runName, propName, newValue, oldProp);
                }
            }
        }
    } catch (ObjectNotFoundException onfe) {
        message = "Test or test run not found: '" + testName + "." + runName + "'!";
        result = ImportResult.ERROR;
        logger.error(message, onfe);

        message += "\r\n\r\n" + onfe.toString();
    } catch (CipherException ce) {
        message = "Error during decryption while import properties of test run: '" + testName + "." + runName
                + "'! No value imported";
        result = ImportResult.ERROR;
        logger.error(message, ce);

        message += "\r\n\r\n" + ce.toString();
    }

    // put return values
    resultObj.put(FIELD_RESULT, result.toString());
    resultObj.put(FIELD_MESSAGE, message);

    return resultObj;
}

From source file:org.alfresco.serializers.types.DefaultTypeConverter.java

License:Open Source License

@SuppressWarnings("rawtypes")
private DefaultTypeConverter() {
    ///*from  w  w  w .  ja v  a  2  s  . c o  m*/
    // From string
    //
    addConverter(String.class, Class.class, new TypeConverter.Converter<String, Class>() {
        public Class convert(String source) {
            try {
                return Class.forName(source);
            } catch (ClassNotFoundException e) {
                throw new TypeConversionException("Failed to convert string to class: " + source, e);
            }
        }
    });
    addConverter(String.class, Boolean.class, new TypeConverter.Converter<String, Boolean>() {
        public Boolean convert(String source) {
            return Boolean.valueOf(source);
        }
    });
    addConverter(String.class, Character.class, new TypeConverter.Converter<String, Character>() {
        public Character convert(String source) {
            if ((source == null) || (source.length() == 0)) {
                return null;
            }
            return Character.valueOf(source.charAt(0));
        }
    });
    addConverter(String.class, Number.class, new TypeConverter.Converter<String, Number>() {
        public Number convert(String source) {
            try {
                return DecimalFormat.getNumberInstance().parse(source);
            } catch (ParseException e) {
                throw new TypeConversionException("Failed to parse number " + source, e);
            }
        }
    });
    addConverter(String.class, Byte.class, new TypeConverter.Converter<String, Byte>() {
        public Byte convert(String source) {
            return Byte.valueOf(source);
        }
    });
    addConverter(String.class, Short.class, new TypeConverter.Converter<String, Short>() {
        public Short convert(String source) {
            return Short.valueOf(source);
        }
    });
    addConverter(String.class, Integer.class, new TypeConverter.Converter<String, Integer>() {
        public Integer convert(String source) {
            return Integer.valueOf(source);
        }
    });
    addConverter(String.class, Long.class, new TypeConverter.Converter<String, Long>() {
        public Long convert(String source) {
            return Long.valueOf(source);
        }
    });
    addConverter(String.class, Float.class, new TypeConverter.Converter<String, Float>() {
        public Float convert(String source) {
            return Float.valueOf(source);
        }
    });
    addConverter(String.class, Double.class, new TypeConverter.Converter<String, Double>() {
        public Double convert(String source) {
            return Double.valueOf(source);
        }
    });
    addConverter(String.class, BigInteger.class, new TypeConverter.Converter<String, BigInteger>() {
        public BigInteger convert(String source) {
            return new BigInteger(source);
        }
    });
    addConverter(String.class, BigDecimal.class, new TypeConverter.Converter<String, BigDecimal>() {
        public BigDecimal convert(String source) {
            return new BigDecimal(source);
        }
    });
    addConverter(BasicDBObject.class, BigDecimal.class,
            new TypeConverter.Converter<BasicDBObject, BigDecimal>() {
                public BigDecimal convert(BasicDBObject source) {
                    String type = (String) source.get("t");
                    if (type.equals("FIXED_POINT")) {
                        String number = (String) source.get("n");
                        Integer precision = (Integer) source.get("p");
                        MathContext ctx = new MathContext(precision);
                        return new BigDecimal(number, ctx);
                    } else {
                        throw new IllegalArgumentException("Invalid source object for conversion " + source
                                + ", expected a Fixed Decimal object");
                    }
                }
            });
    addConverter(String.class, Date.class, new TypeConverter.Converter<String, Date>() {
        public Date convert(String source) {
            try {
                Date date = ISO8601DateFormat.parse(source);
                return date;
            } catch (PlatformRuntimeException e) {
                throw new TypeConversionException("Failed to convert date " + source + " to string", e);
            } catch (AlfrescoRuntimeException e) {
                throw new TypeConversionException("Failed to convert date " + source + " to string", e);
            }
        }
    });
    addConverter(String.class, Duration.class, new TypeConverter.Converter<String, Duration>() {
        public Duration convert(String source) {
            return new Duration(source);
        }
    });
    addConverter(String.class, QName.class, new TypeConverter.Converter<String, QName>() {
        public QName convert(String source) {
            return QName.createQName(source);
        }
    });
    addConverter(BasicDBObject.class, QName.class, new TypeConverter.Converter<BasicDBObject, QName>() {
        public QName convert(BasicDBObject source) {
            String type = (String) source.get("t");
            if (type.equals("QNAME")) {
                String qname = (String) source.get("v");
                return QName.createQName(qname);
            } else {
                throw new IllegalArgumentException();
            }
        }
    });
    addConverter(String.class, ContentData.class, new TypeConverter.Converter<String, ContentData>() {
        public ContentData convert(String source) {
            return ContentData.createContentProperty(source);
        }
    });
    addConverter(String.class, NodeRef.class, new TypeConverter.Converter<String, NodeRef>() {
        public NodeRef convert(String source) {
            return new NodeRef(source);
        }
    });
    addConverter(BasicDBObject.class, NodeRef.class, new TypeConverter.Converter<BasicDBObject, NodeRef>() {
        public NodeRef convert(BasicDBObject source) {
            String type = (String) source.get("t");
            if (!type.equals("NODEREF")) {
                throw new IllegalArgumentException(
                        "Invalid source object for conversion " + source + ", expected a NodeRef object");
            }
            String protocol = (String) source.get("p");
            String storeId = (String) source.get("s");
            String id = (String) source.get("id");
            NodeRef nodeRef = new NodeRef(new StoreRef(protocol, storeId), id);
            return nodeRef;
        }
    });
    addConverter(String.class, StoreRef.class, new TypeConverter.Converter<String, StoreRef>() {
        public StoreRef convert(String source) {
            return new StoreRef(source);
        }
    });
    addConverter(BasicDBObject.class, StoreRef.class, new TypeConverter.Converter<BasicDBObject, StoreRef>() {
        public StoreRef convert(BasicDBObject source) {
            String type = (String) source.get("t");
            if (!type.equals("STOREREF")) {
                throw new IllegalArgumentException(
                        "Invalid source object for conversion " + source + ", expected a StoreRef object");
            }
            String protocol = (String) source.get("p");
            String storeId = (String) source.get("s");
            return new StoreRef(protocol, storeId);
        }
    });
    addConverter(String.class, ChildAssociationRef.class,
            new TypeConverter.Converter<String, ChildAssociationRef>() {
                public ChildAssociationRef convert(String source) {
                    return new ChildAssociationRef(source);
                }
            });
    addConverter(String.class, AssociationRef.class, new TypeConverter.Converter<String, AssociationRef>() {
        public AssociationRef convert(String source) {
            return new AssociationRef(source);
        }
    });
    addConverter(String.class, InputStream.class, new TypeConverter.Converter<String, InputStream>() {
        public InputStream convert(String source) {
            try {
                return new ByteArrayInputStream(source.getBytes("UTF-8"));
            } catch (UnsupportedEncodingException e) {
                throw new TypeConversionException("Encoding not supported", e);
            }
        }
    });
    addConverter(String.class, MLText.class, new TypeConverter.Converter<String, MLText>() {
        public MLText convert(String source) {
            return new MLText(source);
        }
    });
    addConverter(BasicDBObject.class, MLText.class, new TypeConverter.Converter<BasicDBObject, MLText>() {
        public MLText convert(BasicDBObject source) {
            String type = (String) source.get("t");
            if (!type.equals("MLTEXT")) {
                throw new IllegalArgumentException(
                        "Invalid source object for conversion " + source + ", expected a NodeRef object");
            }

            MLText mlText = new MLText();
            for (String languageTag : source.keySet()) {
                String text = (String) source.get(languageTag);
                Locale locale = Locale.forLanguageTag(languageTag);
                mlText.put(locale, text);
            }

            return mlText;
        }
    });
    //        addConverter(BasicDBObject.class, ContentDataWithId.class, new TypeConverter.Converter<BasicDBObject, ContentDataWithId>()
    //        {
    //            public ContentDataWithId convert(BasicDBObject source)
    //            {
    //                String type = (String)source.get("t");
    //                if(!type.equals("CONTENT_DATA_ID"))
    //                {
    //                    throw new IllegalArgumentException("Invalid source object for conversion "
    //                            + source 
    //                            + ", expected a ContentDataWithId object");
    //                }
    //                String contentUrl = (String)source.get("u");
    //                String mimeType = (String)source.get("m");
    //                Long size = (Long)source.get("s");
    //                String encoding = (String)source.get("e");
    //                String languageTag = (String)source.get("l");
    //                Long id = (Long)source.get("id");
    //                Locale locale = Locale.forLanguageTag(languageTag);
    //
    //                ContentData contentData = new ContentData(contentUrl, mimeType, size, encoding, locale);
    //                ContentDataWithId contentDataWithId = new ContentDataWithId(contentData, id);
    //                return contentDataWithId;
    //            }
    //        });
    addConverter(BasicDBObject.class, ContentData.class,
            new TypeConverter.Converter<BasicDBObject, ContentData>() {
                public ContentData convert(BasicDBObject source) {
                    ContentData contentData = null;

                    String type = (String) source.get("t");
                    if (type.equals("CONTENT")) {
                        String contentUrl = (String) source.get("u");
                        String mimeType = (String) source.get("m");
                        Long size = (Long) source.get("s");
                        String encoding = (String) source.get("e");
                        String languageTag = (String) source.get("l");
                        Locale locale = Locale.forLanguageTag(languageTag);
                        contentData = new ContentData(contentUrl, mimeType, size, encoding, locale);
                    } else if (type.equals("CONTENT_DATA_ID")) {
                        String contentUrl = (String) source.get("u");
                        String mimeType = (String) source.get("m");
                        Long size = (Long) source.get("s");
                        String encoding = (String) source.get("e");
                        String languageTag = (String) source.get("l");
                        Locale locale = Locale.forLanguageTag(languageTag);
                        contentData = new ContentData(contentUrl, mimeType, size, encoding, locale);
                    } else {
                        throw new IllegalArgumentException("Invalid source object for conversion " + source
                                + ", expected a ContentData object");
                    }

                    return contentData;
                }
            });
    addConverter(BasicDBObject.class, String.class, new TypeConverter.Converter<BasicDBObject, String>() {
        public String convert(BasicDBObject source) {
            // TODO distinguish between different BasicDBObject representations e.g. for MLText, ...

            Set<String> languageTags = source.keySet();
            if (languageTags.size() == 0) {
                throw new IllegalArgumentException("Persisted MLText is invalid " + source);
            } else if (languageTags.size() > 1) {
                // TODO
                logger.warn("Persisted MLText has more than 1 locale " + source);
            }

            String languageTag = languageTags.iterator().next();
            String text = source.getString(languageTag);
            return text;
        }
    });
    addConverter(String.class, Locale.class, new TypeConverter.Converter<String, Locale>() {
        public Locale convert(String source) {
            return I18NUtil.parseLocale(source);
        }
    });
    addConverter(String.class, Period.class, new TypeConverter.Converter<String, Period>() {
        public Period convert(String source) {
            return new Period(source);
        }
    });
    addConverter(String.class, VersionNumber.class, new TypeConverter.Converter<String, VersionNumber>() {
        public VersionNumber convert(String source) {
            return new VersionNumber(source);
        }
    });

    //
    // From Locale
    //
    addConverter(Locale.class, String.class, new TypeConverter.Converter<Locale, String>() {
        public String convert(Locale source) {
            String localeStr = source.toString();
            if (localeStr.length() < 6) {
                localeStr += "_";
            }
            return localeStr;
        }
    });

    //
    // From VersionNumber
    //
    addConverter(VersionNumber.class, String.class, new TypeConverter.Converter<VersionNumber, String>() {
        public String convert(VersionNumber source) {
            return source.toString();
        }
    });

    //
    // From MLText
    //
    addConverter(MLText.class, String.class, new TypeConverter.Converter<MLText, String>() {
        public String convert(MLText source) {
            return source.getDefaultValue();
        }
    });

    addConverter(MLText.class, BasicDBObject.class, new TypeConverter.Converter<MLText, BasicDBObject>() {
        public BasicDBObject convert(MLText source) {
            BasicDBObject dbObject = new BasicDBObject("t", "MLTEXT");
            for (Map.Entry<Locale, String> entry : source.entrySet()) {
                dbObject.put(entry.getKey().toLanguageTag(), entry.getValue());
            }
            return dbObject;
        }
    });

    //        addConverter(ContentDataWithId.class, BasicDBObject.class, new TypeConverter.Converter<ContentDataWithId, BasicDBObject>()
    //        {
    //            public BasicDBObject convert(ContentDataWithId source)
    //            {
    //                BasicDBObject dbObject = new BasicDBObject("t", "CONTENT_DATA_ID");
    //
    //                String contentUrl = source.getContentUrl();
    //                Long id = source.getId();
    //                String languageTag = source.getLocale().toLanguageTag();
    //                String encoding = source.getEncoding();
    //                long size = source.getSize();
    //                String mimeType = source.getMimetype();
    //
    //                dbObject.put("u", contentUrl);
    //                dbObject.put("m", mimeType);
    //                dbObject.put("s", size);
    //                dbObject.put("e", encoding);
    //                dbObject.put("l", languageTag);
    //                dbObject.put("id", id);
    //                return dbObject;
    //            }
    //        });

    addConverter(ContentData.class, BasicDBObject.class,
            new TypeConverter.Converter<ContentData, BasicDBObject>() {
                public BasicDBObject convert(ContentData source) {
                    BasicDBObject dbObject = new BasicDBObject("t", "CONTENT");

                    String contentUrl = source.getContentUrl();
                    String languageTag = source.getLocale().toLanguageTag();
                    String encoding = source.getEncoding();
                    long size = source.getSize();
                    String mimeType = source.getMimetype();

                    dbObject.put("u", contentUrl);
                    dbObject.put("m", mimeType);
                    dbObject.put("s", size);
                    dbObject.put("e", encoding);
                    dbObject.put("l", languageTag);
                    return dbObject;
                }
            });

    //
    // From enum
    //
    addConverter(Enum.class, String.class, new TypeConverter.Converter<Enum, String>() {
        public String convert(Enum source) {
            return source.toString();
        }
    });

    // From Period
    addConverter(Period.class, String.class, new TypeConverter.Converter<Period, String>() {
        public String convert(Period source) {
            return source.toString();
        }
    });

    // From Class
    addConverter(Class.class, String.class, new TypeConverter.Converter<Class, String>() {
        public String convert(Class source) {
            return source.getName();
        }
    });

    //
    // Number to Subtypes and Date
    //
    addConverter(Number.class, Boolean.class, new TypeConverter.Converter<Number, Boolean>() {
        public Boolean convert(Number source) {
            return new Boolean(source.longValue() > 0);
        }
    });
    addConverter(Number.class, Byte.class, new TypeConverter.Converter<Number, Byte>() {
        public Byte convert(Number source) {
            return Byte.valueOf(source.byteValue());
        }
    });
    addConverter(Number.class, Short.class, new TypeConverter.Converter<Number, Short>() {
        public Short convert(Number source) {
            return Short.valueOf(source.shortValue());
        }
    });
    addConverter(Number.class, Integer.class, new TypeConverter.Converter<Number, Integer>() {
        public Integer convert(Number source) {
            return Integer.valueOf(source.intValue());
        }
    });
    addConverter(Number.class, Long.class, new TypeConverter.Converter<Number, Long>() {
        public Long convert(Number source) {
            return Long.valueOf(source.longValue());
        }
    });
    addConverter(Number.class, Float.class, new TypeConverter.Converter<Number, Float>() {
        public Float convert(Number source) {
            return Float.valueOf(source.floatValue());
        }
    });
    addConverter(Number.class, Double.class, new TypeConverter.Converter<Number, Double>() {
        public Double convert(Number source) {
            return Double.valueOf(source.doubleValue());
        }
    });
    addConverter(Number.class, Date.class, new TypeConverter.Converter<Number, Date>() {
        public Date convert(Number source) {
            return new Date(source.longValue());
        }
    });
    addConverter(Number.class, String.class, new TypeConverter.Converter<Number, String>() {
        public String convert(Number source) {
            return source.toString();
        }
    });
    addConverter(Number.class, BigInteger.class, new TypeConverter.Converter<Number, BigInteger>() {
        public BigInteger convert(Number source) {
            if (source instanceof BigDecimal) {
                return ((BigDecimal) source).toBigInteger();
            } else {
                return BigInteger.valueOf(source.longValue());
            }
        }
    });
    addConverter(Number.class, BigDecimal.class, new TypeConverter.Converter<Number, BigDecimal>() {
        public BigDecimal convert(Number source) {
            if (source instanceof BigInteger) {
                return new BigDecimal((BigInteger) source);
            } else if (source instanceof Double) {
                return BigDecimal.valueOf((Double) source);
            } else if (source instanceof Float) {
                Float val = (Float) source;
                if (val.isInfinite()) {
                    // What else can we do here?  this is 3.4 E 38 so is fairly big
                    return new BigDecimal(Float.MAX_VALUE);
                }
                return BigDecimal.valueOf((Float) source);
            } else {
                return BigDecimal.valueOf(source.longValue());
            }
        }
    });
    addDynamicTwoStageConverter(Number.class, String.class, InputStream.class);

    //
    // Date, Timestamp ->
    //
    addConverter(Timestamp.class, Date.class, new TypeConverter.Converter<Timestamp, Date>() {
        public Date convert(Timestamp source) {
            return new Date(source.getTime());
        }
    });
    addConverter(Date.class, Number.class, new TypeConverter.Converter<Date, Number>() {
        public Number convert(Date source) {
            return Long.valueOf(source.getTime());
        }
    });
    addConverter(Date.class, String.class, new TypeConverter.Converter<Date, String>() {
        public String convert(Date source) {
            try {
                return ISO8601DateFormat.format(source);
            } catch (PlatformRuntimeException e) {
                throw new TypeConversionException("Failed to convert date " + source + " to string", e);
            }
        }
    });
    addConverter(Date.class, Calendar.class, new TypeConverter.Converter<Date, Calendar>() {
        public Calendar convert(Date source) {
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(source);
            return calendar;
        }
    });

    addConverter(Date.class, GregorianCalendar.class, new TypeConverter.Converter<Date, GregorianCalendar>() {
        public GregorianCalendar convert(Date source) {
            GregorianCalendar calendar = new GregorianCalendar();
            calendar.setTime(source);
            return calendar;
        }
    });
    addDynamicTwoStageConverter(Date.class, String.class, InputStream.class);

    //
    // Boolean ->
    //
    final Long LONG_FALSE = new Long(0L);
    final Long LONG_TRUE = new Long(1L);
    addConverter(Boolean.class, Long.class, new TypeConverter.Converter<Boolean, Long>() {
        public Long convert(Boolean source) {
            return source.booleanValue() ? LONG_TRUE : LONG_FALSE;
        }
    });
    addConverter(Boolean.class, String.class, new TypeConverter.Converter<Boolean, String>() {
        public String convert(Boolean source) {
            return source.toString();
        }
    });
    addDynamicTwoStageConverter(Boolean.class, String.class, InputStream.class);

    //
    // Character ->
    //
    addConverter(Character.class, String.class, new TypeConverter.Converter<Character, String>() {
        public String convert(Character source) {
            return source.toString();
        }
    });
    addDynamicTwoStageConverter(Character.class, String.class, InputStream.class);

    //
    // Duration ->
    //
    addConverter(Duration.class, String.class, new TypeConverter.Converter<Duration, String>() {
        public String convert(Duration source) {
            return source.toString();
        }

    });
    addDynamicTwoStageConverter(Duration.class, String.class, InputStream.class);

    //
    // Byte
    //
    addConverter(Byte.class, String.class, new TypeConverter.Converter<Byte, String>() {
        public String convert(Byte source) {
            return source.toString();
        }
    });
    addDynamicTwoStageConverter(Byte.class, String.class, InputStream.class);

    //
    // Short
    //
    addConverter(Short.class, String.class, new TypeConverter.Converter<Short, String>() {
        public String convert(Short source) {
            return source.toString();
        }
    });
    addDynamicTwoStageConverter(Short.class, String.class, InputStream.class);

    //
    // Integer
    //
    addConverter(Integer.class, String.class, new TypeConverter.Converter<Integer, String>() {
        public String convert(Integer source) {
            return source.toString();
        }
    });
    addDynamicTwoStageConverter(Integer.class, String.class, InputStream.class);

    //
    // Long
    //
    addConverter(Long.class, String.class, new TypeConverter.Converter<Long, String>() {
        public String convert(Long source) {
            return source.toString();
        }
    });
    addDynamicTwoStageConverter(Long.class, String.class, InputStream.class);

    //
    // Float
    //
    addConverter(Float.class, String.class, new TypeConverter.Converter<Float, String>() {
        public String convert(Float source) {
            return source.toString();
        }
    });
    addDynamicTwoStageConverter(Float.class, String.class, InputStream.class);

    //
    // Double
    //
    addConverter(Double.class, String.class, new TypeConverter.Converter<Double, String>() {
        public String convert(Double source) {
            return source.toString();
        }
    });
    addDynamicTwoStageConverter(Double.class, String.class, InputStream.class);

    //
    // BigInteger
    //
    addConverter(BigInteger.class, String.class, new TypeConverter.Converter<BigInteger, String>() {
        public String convert(BigInteger source) {
            return source.toString();
        }
    });
    addDynamicTwoStageConverter(BigInteger.class, String.class, InputStream.class);

    //
    // Calendar
    //
    addConverter(Calendar.class, Date.class, new TypeConverter.Converter<Calendar, Date>() {
        public Date convert(Calendar source) {
            return source.getTime();
        }
    });
    addConverter(Calendar.class, String.class, new TypeConverter.Converter<Calendar, String>() {
        public String convert(Calendar source) {
            try {
                return ISO8601DateFormat.format(source.getTime());
            } catch (PlatformRuntimeException e) {
                throw new TypeConversionException("Failed to convert date " + source + " to string", e);
            }
        }
    });

    //
    // BigDecimal
    //
    addConverter(BigDecimal.class, BasicDBObject.class,
            new TypeConverter.Converter<BigDecimal, BasicDBObject>() {
                public BasicDBObject convert(BigDecimal source) {
                    String number = source.toPlainString();
                    int precision = source.precision();
                    BasicDBObject dbObject = new BasicDBObject();
                    dbObject.put("t", "FIXED_POINT");
                    dbObject.put("n", number);
                    dbObject.put("p", precision);
                    return dbObject;
                }
            });
    addConverter(BigDecimal.class, String.class, new TypeConverter.Converter<BigDecimal, String>() {
        public String convert(BigDecimal source) {
            return source.toString();
        }
    });
    addDynamicTwoStageConverter(BigDecimal.class, String.class, InputStream.class);

    //
    // QName
    //
    addConverter(QName.class, String.class, new TypeConverter.Converter<QName, String>() {
        public String convert(QName source) {
            return source.toString();
        }
    });
    addDynamicTwoStageConverter(QName.class, String.class, InputStream.class);

    //
    // EntityRef (NodeRef, ChildAssociationRef, NodeAssociationRef)
    //
    addConverter(EntityRef.class, String.class, new TypeConverter.Converter<EntityRef, String>() {
        public String convert(EntityRef source) {
            return source.toString();
        }
    });
    addConverter(EntityRef.class, BasicDBObject.class, new TypeConverter.Converter<EntityRef, BasicDBObject>() {
        public BasicDBObject convert(EntityRef source) {
            BasicDBObject ret = null;

            if (source instanceof NodeRef) {
                NodeRef nodeRef = (NodeRef) source;

                BasicDBObjectBuilder builder = BasicDBObjectBuilder.start("t", "NODEREF");
                builder.add("p", nodeRef.getStoreRef().getProtocol());
                builder.add("s", nodeRef.getStoreRef().getIdentifier());
                builder.add("id", nodeRef.getId());
                ret = (BasicDBObject) builder.get();
            } else if (source instanceof StoreRef) {
                StoreRef storeRef = (StoreRef) source;

                BasicDBObjectBuilder builder = BasicDBObjectBuilder.start("t", "STOREREF");
                builder.add("p", storeRef.getProtocol());
                builder.add("s", storeRef.getIdentifier());
                ret = (BasicDBObject) builder.get();
            } else {
                throw new IllegalArgumentException();
            }

            return ret;
        }
    });
    addDynamicTwoStageConverter(EntityRef.class, String.class, InputStream.class);

    //
    // ContentData
    //
    addConverter(ContentData.class, String.class, new TypeConverter.Converter<ContentData, String>() {
        public String convert(ContentData source) {
            return source.getInfoUrl();
        }
    });
    addDynamicTwoStageConverter(ContentData.class, String.class, InputStream.class);

    //
    // Path
    //
    addConverter(Path.class, String.class, new TypeConverter.Converter<Path, String>() {
        public String convert(Path source) {
            return source.toString();
        }
    });
    addDynamicTwoStageConverter(Path.class, String.class, InputStream.class);

    //
    // Content Reader
    //
    addConverter(ContentReader.class, InputStream.class,
            new TypeConverter.Converter<ContentReader, InputStream>() {
                public InputStream convert(ContentReader source) {
                    return source.getContentInputStream();
                }
            });
    addConverter(ContentReader.class, String.class, new TypeConverter.Converter<ContentReader, String>() {
        public String convert(ContentReader source) {
            // Getting the string from the ContentReader binary is meaningless
            return source.toString();
        }
    });

    //
    // Content Writer
    //
    addConverter(ContentWriter.class, String.class, new TypeConverter.Converter<ContentWriter, String>() {
        public String convert(ContentWriter source) {
            return source.toString();
        }
    });

    addConverter(Collection.class, BasicDBList.class, new TypeConverter.Converter<Collection, BasicDBList>() {
        public BasicDBList convert(Collection source) {
            BasicDBList ret = new BasicDBList();
            for (Object o : source) {
                ret.add(o);
            }
            return ret;
        }
    });

    addConverter(BasicDBList.class, Collection.class, new TypeConverter.Converter<BasicDBList, Collection>() {
        @SuppressWarnings("unchecked")
        public Collection convert(BasicDBList source) {
            Collection ret = new LinkedList();
            for (Object o : source) {
                ret.add(o);
            }
            return ret;
        }
    });

    //
    // Input Stream
    //
    addConverter(InputStream.class, String.class, new TypeConverter.Converter<InputStream, String>() {
        public String convert(InputStream source) {
            try {
                ByteArrayOutputStream out = new ByteArrayOutputStream();
                byte[] buffer = new byte[8192];
                int read;
                while ((read = source.read(buffer)) > 0) {
                    out.write(buffer, 0, read);
                }
                byte[] data = out.toByteArray();
                return new String(data, "UTF-8");
            } catch (UnsupportedEncodingException e) {
                throw new TypeConversionException("Cannot convert input stream to String.", e);
            } catch (IOException e) {
                throw new TypeConversionException("Conversion from stream to string failed", e);
            } finally {
                if (source != null) {
                    try {
                        source.close();
                    } catch (IOException e) {
                        //NOOP
                    }
                }
            }
        }
    });
    addDynamicTwoStageConverter(InputStream.class, String.class, Date.class);

    addDynamicTwoStageConverter(InputStream.class, String.class, Double.class);

    addDynamicTwoStageConverter(InputStream.class, String.class, Long.class);

    addDynamicTwoStageConverter(InputStream.class, String.class, Boolean.class);

    addDynamicTwoStageConverter(InputStream.class, String.class, QName.class);

    addDynamicTwoStageConverter(InputStream.class, String.class, Path.class);

    addDynamicTwoStageConverter(InputStream.class, String.class, NodeRef.class);

}

From source file:org.alfresco.serializers.types.Serializers.java

License:Open Source License

@SuppressWarnings("unchecked")
@Override//from w ww.ja v a 2s. c  o  m
public Object serialize(Object value) {
    Object ret = null;

    if (value != null) {
        if (value instanceof Map<?, ?>) {
            Map<Serializable, Serializable> map = (Map<Serializable, Serializable>) value;
            // Persist the individual entries
            for (Map.Entry<Serializable, Serializable> entry : map.entrySet()) {
                // Recurse for each value
                Serializable mapKey = entry.getKey();
                Serializable mapValue = entry.getValue();

                Object serializedKey = serialize(mapKey);
                Object serializedValue = serialize(mapValue);

                String key = null;
                if (serializedKey instanceof String) {
                    key = (String) serializedKey;
                } else {
                    key = serializedKey.toString();
                }
                BasicDBObjectBuilder builder = BasicDBObjectBuilder.start();
                builder.add(key, serializedValue);
                ret = builder.get();
            }
        } else if (value instanceof Collection<?>) {
            Collection<Serializable> collection = (Collection<Serializable>) value;

            BasicDBList values = new BasicDBList();

            // Persist the individual entries
            for (Serializable collectionValue : collection) {

                Object mValue = serialize(collectionValue);
                values.add(mValue);
            }

            ret = values;
        } else {
            String valueName = value.getClass().getName();
            Serializer serializer = getSerializer(valueName);
            if (serializer != null) {
                ret = serializer.serialize(value);
            } else {
                ret = value;
            }
        }
    }

    return ret;
}

From source file:org.apache.chemistry.opencmis.mongodb.MongodbUtils.java

License:Apache License

public BasicDBList getNodeAncestors(BasicDBObject node, DBCollection collection) {
    DBCursor ancestors = collection/*from  www . j  a v a2  s  . co  m*/
            .find(new BasicDBObject().append("left", new BasicDBObject().append("$lt", node.getLong("left"))))
            .sort(new BasicDBObject().append("left", 1));
    BasicDBList ancestorsList = new BasicDBList();
    while (ancestors.hasNext()) {
        ancestorsList.add(ancestors.next());
    }
    return ancestorsList;
}

From source file:org.apache.chemistry.opencmis.mongodb.MongodbUtils.java

License:Apache License

public BasicDBList getNodeDescendents(BasicDBObject node, DBCollection collection) {
    BasicDBList descendantsArray = new BasicDBList();
    DBCursor descendants = collection/*from w ww  .j  ava 2  s . c o m*/
            .find(new BasicDBObject().append("left", new BasicDBObject().append("$gt", node.getLong("left")))
                    .append("right", new BasicDBObject().append("$lt", node.getLong("right"))))
            .sort(new BasicDBObject().append("left", 1));

    while (descendants.hasNext()) {
        descendantsArray.add(descendants.next());

    }
    return descendantsArray;
}

From source file:org.apache.chemistry.opencmis.mongodb.MongodbUtils.java

License:Apache License

private BasicDBList getNodeChildren(BasicDBObject node, DBCollection collection) {
    BasicDBList childrenArray = new BasicDBList();
    DBCursor children = collection//from w  w  w  . j  a  v a2  s. c o  m
            .find(new BasicDBObject().append("left", new BasicDBObject().append("$gt", node.getLong("left")))
                    .append("right", new BasicDBObject().append("$lt", node.getLong("right")))
                    .append("level", node.getLong("level") + 1))
            .sort(new BasicDBObject().append("left", 1));

    while (children.hasNext()) {
        childrenArray.add(children.next());

    }
    return childrenArray;
}