Example usage for org.apache.commons.id.uuid VersionFourGenerator nextIdentifier

List of usage examples for org.apache.commons.id.uuid VersionFourGenerator nextIdentifier

Introduction

In this page you can find the example usage for org.apache.commons.id.uuid VersionFourGenerator nextIdentifier.

Prototype

public Object nextIdentifier() 

Source Link

Document

Returns a new version four UUID.

Usage

From source file:org.osaf.cosmo.migrate.ZeroPointFiveToZeroPointSixMigration.java

private void migrateEvents(Connection conn, String dialect) throws Exception {
    PreparedStatement stmt = null;
    PreparedStatement insertStampStmt1 = null;
    PreparedStatement insertStampStmt2 = null;
    PreparedStatement insertEventStmt = null;
    PreparedStatement insertAttributeStmt1 = null;
    PreparedStatement insertAttributeStmt2 = null;
    PreparedStatement deleteContentDataStmt = null;
    PreparedStatement selectContentDataStmt = null;
    PreparedStatement updateEventStmt = null;
    PreparedStatement updatePropsStmt = null;
    PreparedStatement updateTimerangesStmt = null;

    ResultSet rs = null;//from   w  w w  .  ja v a  2  s.  c  o m
    long count = 0;

    System.setProperty("ical4j.unfolding.relaxed", "true");
    CalendarBuilder calBuilder = new CalendarBuilder();

    VersionFourGenerator uidGenerator = new VersionFourGenerator();

    log.debug("begin migrateEvents()");

    try {
        stmt = conn.prepareStatement("select id, contentdataid from item where itemtype=?");
        stmt.setString(1, "event");

        insertStampStmt1 = conn
                .prepareStatement("insert into stamp (stamptype, itemid, isactive) values (?,?,1)");
        insertStampStmt1.setString(1, "event");
        insertStampStmt2 = conn
                .prepareStatement("insert into stamp (stamptype, itemid, id, isactive) values (?,?,?,1)");
        insertStampStmt2.setString(1, "event");

        insertAttributeStmt1 = conn.prepareStatement(
                "insert into attribute (attributetype, namespace, localname, itemid, textvalue, attributename) values (?,?,?,?,?,'a')");
        insertAttributeStmt2 = conn.prepareStatement(
                "insert into attribute (attributetype, namespace, localname, itemid, textvalue, id, attributename) values (?,?,?,?,?,?,'a')");
        insertAttributeStmt1.setString(1, "text");
        insertAttributeStmt2.setString(1, "text");
        insertAttributeStmt1.setString(2, "org.osaf.cosmo.model.NoteItem");
        insertAttributeStmt2.setString(2, "org.osaf.cosmo.model.NoteItem");
        insertAttributeStmt1.setString(3, "body");
        insertAttributeStmt2.setString(3, "body");

        deleteContentDataStmt = conn.prepareStatement("delete from content_data where id=?");
        selectContentDataStmt = conn.prepareStatement("select content from content_data where id=?");

        updateEventStmt = conn.prepareStatement(
                "update item set itemtype=?, contentdataid=?, contentlength=?, icaluid=?, displayname=? where id=?");
        updateEventStmt.setString(1, "note");
        updateEventStmt.setNull(2, Types.BIGINT);

        insertEventStmt = conn.prepareStatement("insert into event_stamp (stampid, icaldata) values (?,?)");
        updatePropsStmt = conn.prepareStatement("update cal_property_index set eventstampid=? where itemid=?");
        updateTimerangesStmt = conn
                .prepareStatement("update cal_timerange_index set eventstampid=? where itemid=?");

        rs = stmt.executeQuery();

        while (rs.next()) {
            count++;
            long itemId = rs.getLong(1);
            long contentDataId = rs.getLong(2);
            long stampId = 0;

            // Add record to stamp
            if ("MySQL5".equals(dialect)) {
                insertStampStmt1.setLong(2, itemId);
                insertStampStmt1.executeUpdate();
            } else {
                stampId = hibernateHelper.getNexIdUsingHiLoGenerator(conn);
                insertStampStmt2.setLong(2, itemId);
                insertStampStmt2.setLong(3, stampId);
                insertStampStmt2.executeUpdate();
            }

            // MySQL uses autogenerated id
            if ("MySQL5".equals(dialect)) {
                ResultSet generatedKeysRs = insertStampStmt1.getGeneratedKeys();
                generatedKeysRs.next();
                stampId = generatedKeysRs.getLong(1);
                generatedKeysRs.close();
            }

            // Get binary content data
            selectContentDataStmt.setLong(1, contentDataId);

            Calendar calendar = null;
            long icalLength = 0;
            String icalUid = null;
            String eventDesc = null;
            String eventSummary = null;
            ResultSet contentDataRs = selectContentDataStmt.executeQuery();
            if (contentDataRs.next()) {
                log.debug("itemid=" + itemId);
                Blob icalBlob = contentDataRs.getBlob(1);
                byte[] icalBytes = icalBlob.getBytes(1, (int) icalBlob.length());
                // have to parse data into Calendar to get right contentlength
                calendar = calBuilder.build(new ByteArrayInputStream(icalBytes));
                VEvent event = (VEvent) calendar.getComponents().getComponents(Component.VEVENT).get(0);

                // Now that we parsed, lets get the UID, DESCRIPTION, and
                // SUMMARY so we can update NoteItem, ContentItem
                Uid uid = event.getUid();

                // Handle the case where events don't have a UID (should be rare)
                if (uid != null)
                    icalUid = event.getUid().getValue();

                if (icalUid == null || "".equals(icalUid))
                    icalUid = null;

                // If there is no UID, create a new one
                if (icalUid == null) {
                    icalUid = uidGenerator.nextIdentifier().toString();
                    if (uid != null)
                        uid.setValue(icalUid);
                    else
                        event.getProperties().add(new Uid(icalUid));
                }

                Property p = event.getProperties().getProperty(Property.DESCRIPTION);
                if (p != null)
                    eventDesc = p.getValue();

                if ("".equals(eventDesc))
                    eventDesc = null;

                p = event.getProperties().getProperty(Property.SUMMARY);
                if (p != null)
                    eventSummary = p.getValue();

                if ("".equals(eventSummary))
                    eventSummary = null;

                // Make sure we can fit summary in displayname column
                if (eventSummary != null && eventSummary.length() >= 255)
                    eventSummary = eventSummary.substring(0, 254);

                // Calculate new length
                icalLength = calendar.toString().getBytes("UTF-8").length;
            }

            contentDataRs.close();

            // update item record with new contentLength, itemtype,
            // icaluid, and displayname
            updateEventStmt.setLong(3, icalLength);
            updateEventStmt.setString(4, icalUid);
            if (eventSummary != null)
                updateEventStmt.setString(5, eventSummary);
            else
                updateEventStmt.setNull(5, Types.VARCHAR);
            updateEventStmt.setLong(6, itemId);
            updateEventStmt.executeUpdate();

            // add event_stamp record
            insertEventStmt.setLong(1, stampId);
            insertEventStmt.setString(2, calendar.toString());

            insertEventStmt.executeUpdate();

            // If there is a DESCRIPTION, add a text attribute
            if (eventDesc != null) {
                if ("MySQL5".equals(dialect)) {
                    insertAttributeStmt1.setLong(4, itemId);
                    insertAttributeStmt1.setString(5, eventDesc);
                    insertAttributeStmt1.executeUpdate();
                } else {
                    long attributeId = hibernateHelper.getNexIdUsingHiLoGenerator(conn);
                    insertAttributeStmt2.setLong(4, itemId);
                    insertAttributeStmt2.setString(5, eventDesc);
                    insertAttributeStmt2.setLong(6, attributeId);
                    insertAttributeStmt2.executeUpdate();
                }
            }

            // Update calendar indexes to reflect item and stamp
            updatePropsStmt.setLong(1, stampId);
            updatePropsStmt.setLong(2, itemId);
            updatePropsStmt.executeUpdate();

            updateTimerangesStmt.setLong(1, stampId);
            updateTimerangesStmt.setLong(2, itemId);
            updateTimerangesStmt.executeUpdate();

            // no longer need content for events
            deleteContentDataStmt.setLong(1, contentDataId);
            deleteContentDataStmt.executeUpdate();
        }

    } finally {
        if (rs != null)
            rs.close();

        if (stmt != null)
            stmt.close();

        if (insertStampStmt1 != null)
            insertStampStmt1.close();

        if (insertStampStmt2 != null)
            insertStampStmt2.close();

        if (insertAttributeStmt1 != null)
            insertAttributeStmt1.close();

        if (insertAttributeStmt2 != null)
            insertAttributeStmt2.close();

        if (deleteContentDataStmt != null)
            deleteContentDataStmt.close();

        if (selectContentDataStmt != null)
            selectContentDataStmt.close();

        if (updateEventStmt != null)
            updateEventStmt.close();

        if (insertEventStmt != null)
            insertEventStmt.close();

        if (updatePropsStmt != null)
            updatePropsStmt.close();

        if (updateTimerangesStmt != null)
            updateTimerangesStmt.close();
    }

    log.debug("processed " + count + " events");
}