package com.perforce.polarion.repository.provider; import java.util.List; import org.apache.log4j.Logger; import com.polarion.alm.tracker.model.IWorkItem; import com.polarion.platform.persistence.IDataService; import com.polarion.platform.persistence.diff.IDiffManager; import com.polarion.platform.persistence.diff.IFieldDiff; import com.polarion.platform.persistence.events.IPersistenceEvent; import com.polarion.platform.persistence.events.IPersistenceListener; import com.polarion.platform.persistence.model.IPObject; import com.polarion.platform.persistence.notifications.ChangeInfo; public class P4PersistenceListener implements IPersistenceListener { private static final Logger log = Logger .getLogger(P4PersistenceListener.class); private final IDataService dataService; public P4PersistenceListener(IDataService dataService) { super(); this.dataService = dataService; } @SuppressWarnings("unchecked") @Override public void handleEvent(IPersistenceEvent event) { String revision = event.getRevision(); String previousRevision = event.getPreviousRevision(); for (IPObject pobject : (List<IPObject>) event.getCreated()) { ChangeInfo change = ChangeInfo.create(pobject, revision, previousRevision, false, true); handleCreation(change); change.forget(); } for (IPObject pobject : (List<IPObject>) event.getModified()) { ChangeInfo change = ChangeInfo.create(pobject, revision, previousRevision, true, true); handleModification(change); change.forget(); } for (IPObject pobject : (List<IPObject>) event.getDeleted()) { ChangeInfo change = ChangeInfo.create(pobject, revision, previousRevision, true, false); handleRemoval(change); change.forget(); } } private void handleCreation(ChangeInfo change) { log.info("Creation of " + change.current.getUri()); } private void handleRemoval(ChangeInfo change) { log.info("Removal of " + change.current.getUri()); } private void handleModification(ChangeInfo change) { IDiffManager diffManager = dataService.getDiffManager(); // FIXME do not use Collections.EMPTY_SET in production, use // IWorkItem.DIFF_IGNORED_FIELDS, IPlan.DIFF_IGNORED_FIELDS etc. IFieldDiff[] fieldDiffs = diffManager.generateDiff(change.before, change.after, IWorkItem.DIFF_IGNORED_FIELDS); StringBuilder builder = new StringBuilder("Modification of " + change.current.getUri() + " in r" + change.revMeta.getName() + ":"); for (IFieldDiff fieldDiff : fieldDiffs) { builder.append("\n " + fieldDiff.getFieldName() + ":"); if (fieldDiff.isCollection()) { builder.append(" added: " + fieldDiff.getAdded()); builder.append(" removed: " + fieldDiff.getRemoved()); } else { builder.append(" before: " + fieldDiff.getBefore()); builder.append(" after: " + fieldDiff.getAfter()); } } log.info(builder); } }
# | Change | User | Description | Committed | |
---|---|---|---|---|---|
#3 | 16771 | Paul Allen |
Added Perforce JOB Create/Update/Delete support. Updated p4java to 15.1 |
||
#2 | 16760 | Paul Allen | Prep: Added JARs for WorkItem and IWorkItem + toString for connection. | ||
#1 | 16723 | Paul Allen | Add Persistence Listener (just hooks and logging). |