package com.perforce.polarion.element.event; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.log4j.Logger; import com.perforce.polarion.element.field.WorkItemAdapter; import com.perforce.polarion.element.field.WorkItemField; 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.model.IPObjectList; import com.polarion.platform.persistence.model.IRevision; 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(); // CREATED for (IPObject pobject : (List<IPObject>) event.getCreated()) { ChangeInfo change = ChangeInfo.create(pobject, revision, previousRevision, false, true); handleCreation(change); change.forget(); } // MODIFIED for (IPObject pobject : (List<IPObject>) event.getModified()) { ChangeInfo change = ChangeInfo.create(pobject, revision, previousRevision, true, true); handleCreation(change); change.forget(); } // DELETED 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()); // exit early if not a WorkItem if (!(change.current instanceof IWorkItem)) { return; } IWorkItem workItem = (IWorkItem) change.current; JobEvent jobEvent = new JobEvent(workItem); jobEvent.update(); } private void handleRemoval(ChangeInfo change) { log.info("Removal of " + change.current.getUri()); // exit early if not a WorkItem if (!(change.current instanceof IWorkItem)) { return; } IWorkItem workItem = (IWorkItem) change.current; JobEvent jobEvent = new JobEvent(workItem); jobEvent.delete(); } private void handleModification(ChangeInfo change) { log.info("Modification of " + change.current.getUri()); // exit early if not a WorkItem if (!(change.current instanceof IWorkItem)) { return; } IWorkItem workItem = (IWorkItem) change.current; IDiffManager diffManager = dataService.getDiffManager(); IFieldDiff[] fieldDiffs = diffManager.generateDiff(change.before, change.after, IWorkItem.DIFF_IGNORED_FIELDS); Map<WorkItemField, String> changes = new HashMap<>(); for (IFieldDiff fieldDiff : fieldDiffs) { String name = fieldDiff.getFieldName(); log.debug("... processing: " + name); WorkItemField workItemField = WorkItemField.parse(name); // Skip unsupported fields if (workItemField == null) { continue; } // Look for Linked revisions (and other non Job fields) switch (workItemField) { case LINKED_REVISIONS: @SuppressWarnings("unchecked") IPObjectList<IRevision> links = workItem.getLinkedRevisions(); break; default: WorkItemAdapter adapter = new WorkItemAdapter(workItem); String value = adapter.get(workItemField); changes.put(workItemField, value); break; } } JobEvent jobEvent = new JobEvent(workItem); jobEvent.update(); } }
# | Change | User | Description | Committed | |
---|---|---|---|---|---|
#4 | 17342 | Paul Allen | Delete old Perforce job after Import and Status lookup in Jobspec (or use 'unknown'). | ||
#3 | 17338 | Paul Allen | Job scanner - looks for changes to Perforce Jobs and updates the linked WorkItems. | ||
#2 | 16772 | Paul Allen | Basic Job Field replication and framework for Fixes. | ||
#1 | 16771 | Paul Allen |
Added Perforce JOB Create/Update/Delete support. Updated p4java to 15.1 |
||
//guest/perforce_software/p4polarion/main/src/com/perforce/polarion/repository/provider/P4PersistenceListener.java | |||||
#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). |