package nl.amis.mds; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import javax.faces.application.FacesMessage; import javax.faces.context.FacesContext; import javax.faces.event.ActionEvent; import oracle.adf.share.ADFContext; import oracle.adf.share.security.SecurityContext; import oracle.mds.core.MDSInstance; import oracle.mds.core.MDSSession; import oracle.mds.exception.MDSException; import oracle.mds.internal.query.NameQueryImpl; import oracle.mds.query.ConditionFactory; import oracle.mds.query.QueryResult; import oracle.mds.transfer.MDSTransfer; import oracle.mds.transfer.TransferUnitList; /* * based on work described in http://multikoop.blogspot.com/2012/01/adf-mds-power-user-layer-and-to-control.html * * */ public class MDSCoordinator { private String fragmentName; public void removePersonalizations(ActionEvent actionEvent) { ADFContext adfCtx = ADFContext.getCurrent(); SecurityContext secCntx = adfCtx.getSecurityContext(); String username = secCntx.getUserName(); List listOfFilesToDelete= queryFiles("/pages/mdssys/cust/user/" + username , getFragmentName()+"%"); try { deleteDocuments(listOfFilesToDelete); FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, null, "Deleted the following MDS-Documents for user " + username + ": " + listOfFilesToDelete)); } catch (MDSException e) { e.printStackTrace(); } } /** * Query Files from MDS matching the given substr. * @return list of document file paths */ public static List queryFiles(final String path, final String name) { final MDSSession mdsSession = getCurrentMDSSession(); final NameQueryImpl nameQuery = new NameQueryImpl(mdsSession, ConditionFactory.createNameCondition(path, name, true)); final Iterator result = nameQuery.execute(); final ArrayList listOfFiles = new ArrayList(); while (result.hasNext()) { final QueryResult qr = result.next(); final String absoluteName = qr.getAbsoluteName(); listOfFiles.add(absoluteName); } return listOfFiles; } /** * Deletes the given file paths from MDS using the current MDS Instance * @param listOfFiles * @throws MDSException */ public static void deleteDocuments(final List listOfFiles) throws MDSException { if (listOfFiles == null || listOfFiles.isEmpty()) { System.out.println("listOfFiles is empty"); return; } deleteDocuments(getCurrentMDSInstance(), listOfFiles); } public static void deleteDocuments(final MDSInstance mdsInstance, final List listOfFiles) throws MDSException { MDSTransfer transferInstance = MDSTransfer.getInstance(mdsInstance); TransferUnitList transferUnitList = TransferUnitList.create(mdsInstance, listOfFiles, null, true, true); transferInstance.delete(transferUnitList, false) /* cancelOnException */; transferInstance.release(mdsInstance); } public static MDSInstance getCurrentMDSInstance() { final MDSInstance mdsInstance = (MDSInstance)ADFContext.getCurrent().getMDSInstanceAsObject(); return mdsInstance; } public static MDSSession getCurrentMDSSession() { final MDSSession mdsSession = (MDSSession)ADFContext.getCurrent().getMDSSessionAsObject(); return mdsSession; } public void setFragmentName(String fragmentName) { this.fragmentName = fragmentName; } public String getFragmentName() { return fragmentName; } }