/* * Copyright (c) 2006, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.wso2.carbon.registry.activities.services.utils; import org.apache.axis2.context.MessageContext; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.wso2.carbon.registry.core.LogEntry; import org.wso2.carbon.registry.core.Registry; import org.wso2.carbon.registry.core.RegistryConstants; import org.wso2.carbon.registry.core.exceptions.RegistryException; import org.wso2.carbon.registry.core.session.UserRegistry; import org.wso2.carbon.registry.common.beans.ActivityBean; import org.wso2.carbon.registry.common.utils.CommonUtil; import org.wso2.carbon.user.core.UserRealm; import org.wso2.carbon.user.core.UserStoreManager; import java.text.DateFormat; import java.text.ParseException; import java.util.*; public class ActivityBeanPopulator { private static final Log log = LogFactory.getLog(ActivityBeanPopulator.class); public static ActivityBean populate(UserRegistry userRegistry, String userName, String resourcePath, String fromDate, String toDate, String filter, String pageStr) throws Exception{ UserRealm realm = userRegistry.getUserRealm(); UserStoreManager reader = realm.getUserStoreManager(); String[] roles = reader.getRoleListOfUser(userRegistry.getUserName()); List list = Arrays.asList(roles); ActivityBean activityBean = new ActivityBean(); if (resourcePath != null && resourcePath.equals("")) { resourcePath = null; } if (userName != null && userName.equals("")) { userName = null; } if (fromDate != null && fromDate.equals("")) { fromDate = null; } if (toDate != null && toDate.equals("")) { toDate = null; } if (filter == null) { filter = "1"; } List<Integer> filterValues = new LinkedList<Integer>(); if (filter.equals("resourceAdd")) { filterValues.add(LogEntry.ADD); } else if (filter.equals("resourceUpdate")) { filterValues.add(LogEntry.UPDATE); } else if (filter.equals("commentings")) { filterValues.add(LogEntry.COMMENT); filterValues.add(LogEntry.DELETE_COMMENT); } else if (filter.equals("taggings")) { filterValues.add(LogEntry.TAG); filterValues.add(LogEntry.REMOVE_TAG); } else if (filter.equals("ratings")) { filterValues.add(LogEntry.RATING); } else if (filter.equals("restore")) { filterValues.add(LogEntry.RESTORE); } else if (filter.equals("delete")) { filterValues.add(LogEntry.DELETE_RESOURCE); } else if (filter.equals("addAssociation")) { filterValues.add(LogEntry.ADD_ASSOCIATION); } else if (filter.equals("removeAssociation")) { filterValues.add(LogEntry.REMOVE_ASSOCIATION); } else if (filter.equals("createSymbolicLink")) { filterValues.add(LogEntry.CREATE_SYMBOLIC_LINK); } else if (filter.equals("createRemoteLink")) { filterValues.add(LogEntry.CREATE_REMOTE_LINK); } else if (filter.equals("removeLink")) { filterValues.add(LogEntry.REMOVE_LINK); } else if (filter.equals("associateAspect")) { filterValues.add(LogEntry.ASSOCIATE_ASPECT); } else { filterValues.add(-1); } try { List<LogEntry> logList = new LinkedList<LogEntry>(); for (Integer filterValue : filterValues) { logList.addAll(Arrays.asList(userRegistry.getLogs(resourcePath, filterValue, userName, computeDate(fromDate), computeDate(toDate), true))); } LogEntry[] logs = logList.toArray(new LogEntry[logList.size()]); Arrays.sort(logs, new Comparator<LogEntry>() { public int compare(LogEntry o1, LogEntry o2) { return o2.getDate().compareTo(o1.getDate()); } }); if (list.contains(userRegistry.getUserRealm().getRealmConfiguration().getAdminRoleName())) { activityBean.setActivity(constructActivityStatements(userRegistry, logs)); } else{ activityBean.setActivity(constructActivityStatementsfornormaluser(userRegistry, logs, userRegistry.getUserName())); } } catch (RegistryException e) { String msg = "Failed to get activities for generating activity search results " + e.getMessage(); log.error(msg, e); activityBean.setErrorMessage(msg); } return activityBean; } private static String [] constructActivityStatements(Registry registry, LogEntry[] logs) { String [] activity = new String [logs.length]; for (int i = 0; i < logs.length; i++) { LogEntry logEntry = logs[i]; if (logEntry.getAction() == LogEntry.ADD) { String entry = Boolean.toString(resourceExists(registry, logEntry)) + "|" + logEntry.getUserName() + "|" + logEntry.getUserName() + "|" + " has added the resource " + "|" + logEntry.getResourcePath() + "|" + logEntry.getResourcePath() + "|" + " " + CommonUtil.formatDate(logEntry.getDate()) + "."; activity[i] = entry; } else if (logEntry.getAction() == LogEntry.UPDATE) { String entry = Boolean.toString(resourceExists(registry, logEntry)) + "|" + logEntry.getUserName() + "|" + logEntry.getUserName() + "|" + " has updated the resource " + "|" + logEntry.getResourcePath() + "|" + logEntry.getResourcePath() + "|" + " " + CommonUtil.formatDate(logEntry.getDate()) + "."; activity[i] = entry; } else if (logEntry.getAction() == LogEntry.DELETE_RESOURCE) { String entry = Boolean.toString(resourceExists(registry, logEntry)) + "|" + logEntry.getUserName() + "|" + logEntry.getUserName() + "|" + " has deleted the resource " + "|" + logEntry.getResourcePath() + "|" + logEntry.getResourcePath() + "|" + " " + CommonUtil.formatDate(logEntry.getDate()) + "."; activity[i] = entry; } else if (logEntry.getAction() == LogEntry.COMMENT) { String entry = Boolean.toString(resourceExists(registry, logEntry)) + "|" + logEntry.getUserName() + "|" + logEntry.getUserName() + "|" + " has commented on resource " + "|" + logEntry.getResourcePath() + "|" + logEntry.getResourcePath() + "|" + " " + CommonUtil.formatDate(logEntry.getDate()) + " with the following comment." + "|" + logEntry.getActionData(); activity[i] = entry; } else if (logEntry.getAction() == LogEntry.DELETE_COMMENT) { String entry = Boolean.toString(resourceExists(registry, logEntry)) + "|" + logEntry.getUserName() + "|" + logEntry.getUserName() + "|" + " has deleted the comment '" + logEntry.getActionData() + "' on the resource " + "|" + logEntry.getResourcePath() + "|" + logEntry.getResourcePath() + "|" + " " + CommonUtil.formatDate(logEntry.getDate()) + "."; activity[i] = entry; } else if (logEntry.getAction() == LogEntry.TAG) { String entry = Boolean.toString(resourceExists(registry, logEntry)) + "|" + logEntry.getUserName() + "|" + logEntry.getUserName() + "|" + " has tagged the resource " + "|" + logEntry.getResourcePath() + "|" + logEntry.getResourcePath() + "|" + " with tag '" + logEntry.getActionData() + "' " + CommonUtil.formatDate(logEntry.getDate()) + "."; activity[i] = entry; } else if (logEntry.getAction() == LogEntry.REMOVE_TAG) { String entry = Boolean.toString(resourceExists(registry, logEntry)) + "|" + logEntry.getUserName() + "|" + logEntry.getUserName() + "|" + " has removed the tag '" + logEntry.getActionData() + "' on the resource " + "|" + logEntry.getResourcePath() + "|" + logEntry.getResourcePath() + "|" + " " + CommonUtil.formatDate(logEntry.getDate()) + "."; activity[i] = entry; } else if (logEntry.getAction() == LogEntry.RATING) { String entry = Boolean.toString(resourceExists(registry, logEntry)) + "|" + logEntry.getUserName() + "|" + logEntry.getUserName() + "|" + " has rated the resource " + "|" + logEntry.getResourcePath() + "|" + logEntry.getResourcePath() + "|" + " with rating " + logEntry.getActionData() + " " + CommonUtil.formatDate(logEntry.getDate()) + "."; activity[i] = entry; } else if (logEntry.getAction() == LogEntry.ADD_ASSOCIATION) { String[] actionData = logEntry.getActionData().split(";"); if (actionData != null && actionData.length >= 2) { String entry = Boolean.toString(resourceExists(registry, logEntry)) + "|" + logEntry.getUserName() + "|" + logEntry.getUserName() + "|" + " has added an association of type " + actionData[0] + " from the resource " + "|" + logEntry.getResourcePath() + "|" + logEntry.getResourcePath() + "|" + " to the resource " + actionData[1] + " " + CommonUtil.formatDate(logEntry.getDate()) + "."; activity[i] = entry; } } else if (logEntry.getAction() == LogEntry.REMOVE_ASSOCIATION) { String[] actionData = logEntry.getActionData().split(";"); if (actionData != null && actionData.length >= 2) { String entry = Boolean.toString(resourceExists(registry, logEntry)) + "|" + logEntry.getUserName() + "|" + logEntry.getUserName() + "|" + " has removed an association of type " + actionData[0] + " from the resource " + "|" + logEntry.getResourcePath() + "|" + logEntry.getResourcePath() + "|" + " to the resource " + actionData[1] + " " + CommonUtil.formatDate(logEntry.getDate()) + "."; activity[i] = entry; } } else if (logEntry.getAction() == LogEntry.RESTORE) { String entry = Boolean.toString(resourceExists(registry, logEntry)) + "|" + logEntry.getUserName() + "|" + logEntry.getUserName() + "|" + " has restored the resource " + "|" + logEntry.getResourcePath() + "|" + logEntry.getResourcePath() + "|" + ((logEntry.getActionData() != null) ? " to the version " + logEntry.getActionData() : "") + " " + CommonUtil.formatDate(logEntry.getDate()) + "."; activity[i] = entry; } else if (logEntry.getAction() == LogEntry.ASSOCIATE_ASPECT) { String entry = Boolean.toString(resourceExists(registry, logEntry)) + "|" + logEntry.getUserName() + "|" + logEntry.getUserName() + "|" + " has associated the aspect " + logEntry.getActionData() + " to the resource " + "|" + logEntry.getResourcePath() + "|" + logEntry.getResourcePath() + "|" + " " + CommonUtil.formatDate(logEntry.getDate()) + "."; activity[i] = entry; } else if (logEntry.getAction() == LogEntry.COPY) { String entry = Boolean.toString(resourceExists(registry, logEntry)) + "|" + logEntry.getUserName() + "|" + logEntry.getUserName() + "|" + " has copied the resource " + "|" + logEntry.getResourcePath() + "|" + logEntry.getResourcePath() + "|" + " to the Location " + logEntry.getActionData() + " " + CommonUtil.formatDate(logEntry.getDate()) + "."; activity[i] = entry; } else if (logEntry.getAction() == LogEntry.RENAME) { String entry = Boolean.toString(resourceExists(registry, logEntry)) + "|" + logEntry.getUserName() + "|" + logEntry.getUserName() + "|" + " has renamed the resource to " + "|" + logEntry.getResourcePath() + "|" + logEntry.getResourcePath() + "|" + " from old Name: " + logEntry.getActionData() + " " + CommonUtil.formatDate(logEntry.getDate()) + "."; activity[i] = entry; } else if (logEntry.getAction() == LogEntry.MOVE) { String entry = Boolean.toString(resourceExists(registry, logEntry)) + "|" + logEntry.getUserName() + "|" + logEntry.getUserName() + "|" + " has moved the resource to " + "|" + logEntry.getResourcePath() + "|" + logEntry.getResourcePath() + "|" + " from the Location " + logEntry.getActionData() + " " + CommonUtil.formatDate(logEntry.getDate()) + "."; activity[i] = entry; } else if (logEntry.getAction() == LogEntry.CREATE_SYMBOLIC_LINK) { String entry = Boolean.toString(resourceExists(registry, logEntry)) + "|" + logEntry.getUserName() + "|" + logEntry.getUserName() + "|" + " has created a symbolic link " + "|" + logEntry.getResourcePath() + "|" + logEntry.getResourcePath() + "|" + " to the Location " + logEntry.getActionData() + " " + CommonUtil.formatDate(logEntry.getDate()) + "."; activity[i] = entry; } else if (logEntry.getAction() == LogEntry.CREATE_REMOTE_LINK) { if (logEntry.getActionData().contains(";")) { String[] actionData = logEntry.getActionData().split(";"); if (actionData != null && actionData.length >= 2) { String entry = Boolean.toString(resourceExists(registry, logEntry)) + "|" + logEntry.getUserName() + "|" + logEntry.getUserName() + "|" + " has created a remote link " + "|" + logEntry.getResourcePath() + "|" + logEntry.getResourcePath() + "|" + " to the instance " + actionData[0] + " at path " + actionData[1] + " " + CommonUtil.formatDate(logEntry.getDate()) + "."; activity[i] = entry; } } else { String entry = Boolean.toString(resourceExists(registry, logEntry)) + "|" + logEntry.getUserName() + "|" + logEntry.getUserName() + "|" + " has created a remote link " + "|" + logEntry.getResourcePath() + "|" + logEntry.getResourcePath() + "|" + " to the Location " + logEntry.getActionData() + " " + CommonUtil.formatDate(logEntry.getDate()) + "."; activity[i] = entry; } } else if (logEntry.getAction() == LogEntry.REMOVE_LINK) { String entry = Boolean.toString(resourceExists(registry, logEntry)) + "|" + logEntry.getUserName() + "|" + logEntry.getUserName() + "|" + " has removed link " + "|" + logEntry.getResourcePath() + "|" + logEntry.getResourcePath() + "|" + " " + CommonUtil.formatDate(logEntry.getDate()) + "."; activity[i] = entry; } } return activity; } private static Boolean resourceExists(Registry registry, LogEntry entry) { try { return registry != null && entry != null && entry.getResourcePath() != null && registry.resourceExists(entry.getResourcePath()); } catch (RegistryException ignore) { return false; } } private static String [] constructActivityStatementsfornormaluser(Registry registry, LogEntry[] logs,String Username) { ArrayList<String> list = new ArrayList<String>(); for (int i = 0; i < logs.length; i++) { LogEntry logEntry = logs[i]; if(logEntry.getUserName().equals(Username)){ if (logEntry.getAction() == LogEntry.ADD) { String entry = Boolean.toString(resourceExists(registry, logEntry)) + "|" + logEntry.getUserName() + "|" + logEntry.getUserName() + "|" + " has added the resource " + "|" + logEntry.getResourcePath() + "|" + logEntry.getResourcePath() + "|" + " " + CommonUtil.formatDate(logEntry.getDate()) + "."; list.add(entry); } else if (logEntry.getAction() == LogEntry.UPDATE) { String entry = Boolean.toString(resourceExists(registry, logEntry)) + "|" + logEntry.getUserName() + "|" + logEntry.getUserName() + "|" + " has updated the resource " + "|" + logEntry.getResourcePath() + "|" + logEntry.getResourcePath() + "|" + " " + CommonUtil.formatDate(logEntry.getDate()) + "."; list.add(entry); } else if (logEntry.getAction() == LogEntry.DELETE_RESOURCE) { String entry = Boolean.toString(resourceExists(registry, logEntry)) + "|" + logEntry.getUserName() + "|" + logEntry.getUserName() + "|" + " has deleted the resource " + "|" + logEntry.getResourcePath() + "|" + logEntry.getResourcePath() + "|" + " " + CommonUtil.formatDate(logEntry.getDate()) + "."; list.add(entry); } else if (logEntry.getAction() == LogEntry.COMMENT) { String entry = Boolean.toString(resourceExists(registry, logEntry)) + "|" + logEntry.getUserName() + "|" + logEntry.getUserName() + "|" + " has commented on resource " + "|" + logEntry.getResourcePath() + "|" + logEntry.getResourcePath() + "|" + " " + CommonUtil.formatDate(logEntry.getDate()) + " with the following comment." + "|" + logEntry.getActionData(); list.add(entry); } else if (logEntry.getAction() == LogEntry.DELETE_COMMENT) { String entry = Boolean.toString(resourceExists(registry, logEntry)) + "|" + logEntry.getUserName() + "|" + logEntry.getUserName() + "|" + " has deleted the comment '" + logEntry.getActionData() + "' on the resource " + "|" + logEntry.getResourcePath() + "|" + logEntry.getResourcePath() + "|" + " " + CommonUtil.formatDate(logEntry.getDate()) + "."; list.add(entry); } else if (logEntry.getAction() == LogEntry.TAG) { String entry = Boolean.toString(resourceExists(registry, logEntry)) + "|" + logEntry.getUserName() + "|" + logEntry.getUserName() + "|" + " has tagged the resource " + "|" + logEntry.getResourcePath() + "|" + logEntry.getResourcePath() + "|" + " with tag '" + logEntry.getActionData() + "' " + CommonUtil.formatDate(logEntry.getDate()) + "."; list.add(entry); } else if (logEntry.getAction() == LogEntry.REMOVE_TAG) { String entry = Boolean.toString(resourceExists(registry, logEntry)) + "|" + logEntry.getUserName() + "|" + logEntry.getUserName() + "|" + " has removed the tag '" + logEntry.getActionData() + "' on the resource " + "|" + logEntry.getResourcePath() + "|" + logEntry.getResourcePath() + "|" + " " + CommonUtil.formatDate(logEntry.getDate()) + "."; list.add(entry); } else if (logEntry.getAction() == LogEntry.RATING) { String entry = Boolean.toString(resourceExists(registry, logEntry)) + "|" + logEntry.getUserName() + "|" + logEntry.getUserName() + "|" + " has rated the resource " + "|" + logEntry.getResourcePath() + "|" + logEntry.getResourcePath() + "|" + " with rating " + logEntry.getActionData() + " " + CommonUtil.formatDate(logEntry.getDate()) + "."; list.add(entry); } else if (logEntry.getAction() == LogEntry.ADD_ASSOCIATION) { String[] actionData = logEntry.getActionData().split(";"); if (actionData != null && actionData.length >= 2) { String entry = Boolean.toString(resourceExists(registry, logEntry)) + "|" + logEntry.getUserName() + "|" + logEntry.getUserName() + "|" + " has added an association of type " + actionData[0] + " from the resource " + "|" + logEntry.getResourcePath() + "|" + logEntry.getResourcePath() + "|" + " to the resource " + actionData[1] + " " + CommonUtil.formatDate(logEntry.getDate()) + "."; list.add(entry); } } else if (logEntry.getAction() == LogEntry.REMOVE_ASSOCIATION) { String[] actionData = logEntry.getActionData().split(";"); if (actionData != null && actionData.length >= 2) { String entry = Boolean.toString(resourceExists(registry, logEntry)) + "|" + logEntry.getUserName() + "|" + logEntry.getUserName() + "|" + " has removed an association of type " + actionData[0] + " from the resource " + "|" + logEntry.getResourcePath() + "|" + logEntry.getResourcePath() + "|" + " to the resource " + actionData[1] + " " + CommonUtil.formatDate(logEntry.getDate()) + "."; list.add(entry); } } else if (logEntry.getAction() == LogEntry.RESTORE) { String entry = Boolean.toString(resourceExists(registry, logEntry)) + "|" + logEntry.getUserName() + "|" + logEntry.getUserName() + "|" + " has restored the resource " + "|" + logEntry.getResourcePath() + "|" + logEntry.getResourcePath() + "|" + ((logEntry.getActionData() != null) ? " to the version " + logEntry.getActionData() : "") + " " + CommonUtil.formatDate(logEntry.getDate()) + "."; list.add(entry); } else if (logEntry.getAction() == LogEntry.ASSOCIATE_ASPECT) { String entry = Boolean.toString(resourceExists(registry, logEntry)) + "|" + logEntry.getUserName() + "|" + logEntry.getUserName() + "|" + " has associated the aspect " + logEntry.getActionData() + " to the resource " + "|" + logEntry.getResourcePath() + "|" + logEntry.getResourcePath() + "|" + " " + CommonUtil.formatDate(logEntry.getDate()) + "."; list.add(entry); } else if (logEntry.getAction() == LogEntry.COPY) { String entry = Boolean.toString(resourceExists(registry, logEntry)) + "|" + logEntry.getUserName() + "|" + logEntry.getUserName() + "|" + " has copied the resource " + "|" + logEntry.getResourcePath() + "|" + logEntry.getResourcePath() + "|" + " to the Location " + logEntry.getActionData() + " " + CommonUtil.formatDate(logEntry.getDate()) + "."; list.add(entry); } else if (logEntry.getAction() == LogEntry.RENAME) { String entry = Boolean.toString(resourceExists(registry, logEntry)) + "|" + logEntry.getUserName() + "|" + logEntry.getUserName() + "|" + " has renamed the resource " + "|" + logEntry.getResourcePath() + "|" + logEntry.getResourcePath() + "|" + " to new Name: " + logEntry.getActionData() + " " + CommonUtil.formatDate(logEntry.getDate()) + "."; list.add(entry); } else if (logEntry.getAction() == LogEntry.MOVE) { String entry = Boolean.toString(resourceExists(registry, logEntry)) + "|" + logEntry.getUserName() + "|" + logEntry.getUserName() + "|" + " has moved the resource " + "|" + logEntry.getResourcePath() + "|" + logEntry.getResourcePath() + "|" + " to the Location " + logEntry.getActionData() + " " + CommonUtil.formatDate(logEntry.getDate()) + "."; list.add(entry); } else if (logEntry.getAction() == LogEntry.CREATE_SYMBOLIC_LINK) { String entry = Boolean.toString(resourceExists(registry, logEntry)) + "|" + logEntry.getUserName() + "|" + logEntry.getUserName() + "|" + " has created a symbolic link " + "|" + logEntry.getResourcePath() + "|" + logEntry.getResourcePath() + "|" + " to the Location " + logEntry.getActionData() + " " + CommonUtil.formatDate(logEntry.getDate()) + "."; list.add(entry); } else if (logEntry.getAction() == LogEntry.CREATE_REMOTE_LINK) { if (logEntry.getActionData().contains(";")) { String[] actionData = logEntry.getActionData().split(";"); if (actionData != null && actionData.length >= 2) { String entry = Boolean.toString(resourceExists(registry, logEntry)) + "|" + logEntry.getUserName() + "|" + logEntry.getUserName() + "|" + " has created a remote link " + "|" + logEntry.getResourcePath() + "|" + logEntry.getResourcePath() + "|" + " to the instance " + actionData[0] + " at path " + actionData[1] + " " + CommonUtil.formatDate(logEntry.getDate()) + "."; list.add(entry); } } else { String entry = Boolean.toString(resourceExists(registry, logEntry)) + "|" + logEntry.getUserName() + "|" + logEntry.getUserName() + "|" + " has created a remote link " + "|" + logEntry.getResourcePath() + "|" + logEntry.getResourcePath() + "|" + " to the Location " + logEntry.getActionData() + " " + CommonUtil.formatDate(logEntry.getDate()) + "."; list.add(entry); } } else if (logEntry.getAction() == LogEntry.REMOVE_LINK) { String entry = Boolean.toString(resourceExists(registry, logEntry)) + "|" + logEntry.getUserName() + "|" + logEntry.getUserName() + "|" + " has removed link " + "|" + logEntry.getResourcePath() + "|" + logEntry.getResourcePath() + "|" + " " + CommonUtil.formatDate(logEntry.getDate()) + "."; list.add(entry); } } } String[] activity = new String[list.size()]; for(int i=0;i<list.size();i++){ activity[i] = list.get(i); } return activity; } /** * Converts given strings to Dates * * @param dateString Allowed format mm/dd/yyyy * @return Date corresponding to the given string date */ private static Date computeDate(String dateString) throws RegistryException { if (dateString == null || dateString.length() == 0) { return null; } DateFormat formatter = DateFormat.getDateInstance(DateFormat.SHORT, Locale.ENGLISH); try { return formatter.parse(dateString); } catch (ParseException e) { String msg = "Date format is invalid: " + dateString; throw new RegistryException(msg, e); } } }