package org.gcube.dataharvest.harvester; import java.util.Date; import java.util.List; import java.util.Locale; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import org.gcube.dataharvest.AccountingDataHarvesterPlugin; import org.gcube.dataharvest.datamodel.Harvest; import org.gcube.dataharvest.utils.Utils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.apache.commons.lang.Validate; import org.gcube.common.homelibrary.home.Home; import org.gcube.common.homelibrary.home.HomeLibrary; import org.gcube.common.homelibrary.home.HomeManager; import org.gcube.common.homelibrary.home.exceptions.HomeNotFoundException; import org.gcube.common.homelibrary.home.exceptions.InternalErrorException; import org.gcube.common.homelibrary.home.exceptions.UserNotFoundException; import org.gcube.common.homelibrary.home.workspace.WorkspaceItem; import org.gcube.common.homelibrary.home.workspace.accounting.AccountingEntry; import org.gcube.common.homelibrary.home.workspace.exceptions.InsufficientPrivilegesException; import org.gcube.common.homelibrary.home.workspace.exceptions.ItemAlreadyExistException; import org.gcube.common.homelibrary.home.workspace.exceptions.ItemNotFoundException; import org.gcube.common.homelibrary.home.workspace.exceptions.WorkspaceFolderNotFoundException; import org.gcube.common.homelibrary.home.workspace.exceptions.WrongDestinationException; import org.gcube.common.homelibrary.jcr.repository.JCRRepository; import org.gcube.common.homelibrary.jcr.workspace.JCRWorkspace; import org.gcube.common.homelibrary.jcr.workspace.JCRWorkspaceItem; import org.gcube.common.homelibrary.model.exceptions.RepositoryException; import org.gcube.common.scope.api.ScopeProvider; public class DataMethodDownloadHarvester extends BasicHarvester { private Date startDate, endDate; private DateFormat format; private final String SCOPE = "/d4science.research-infrastructures.eu/gCubeApps/SoBigData.eu"; private static Logger logger = LoggerFactory.getLogger(DataMethodDownloadHarvester.class); private int count = 0; public DataMethodDownloadHarvester(String start, String end) throws ParseException { super(start, end); //ScopeProvider.instance.set(SCOPE); } public DataMethodDownloadHarvester(Date start, Date end) throws ParseException { super(start, end); //ScopeProvider.instance.set(SCOPE); } @Override public List getData() throws Exception { ArrayList data = new ArrayList(); ScopeProvider.instance.set(SCOPE); String[] vres = getActiveVREs(true); for (String vre : vres) { try { count = 0; logger.error("HomeManager manager = HomeLibrary.getHomeManagerFactory().getHomeManager()"); HomeManager manager = HomeLibrary.getHomeManagerFactory().getHomeManager(); String user = getVREName(vre) + "-Manager"; logger.error("Home home = manager.getHome(user)"); Home home = manager.getHome(user); logger.error("JCRWorkspace ws = (JCRWorkspace) home.getWorkspace()"); JCRWorkspace ws = (JCRWorkspace) home.getWorkspace(); logger.error("ws.getItemByPath..."); JCRWorkspaceItem item = (JCRWorkspaceItem) ws .getItemByPath("/Workspace/MySpecialFolders/" + getVREName(vre)); logger.debug("Analyzing " + vre + " from " + startDate.toString() + " to " + endDate.toString()); logger.error("Before getStats()"); getStats(item, startDate, endDate); logger.error("After getStats()"); Harvest harvest = new Harvest(Harvest.DATA_METHOD_DOWNLOAD, vre, count); data.add(harvest); logger.debug(harvest.toString()); } catch (Exception e) { logger.error("DataMethodDownloadHarvester: Error processing VRE: " + vre + "\n" + e.getLocalizedMessage()); } } return data; } private void getStats(WorkspaceItem root, Date start, Date end) throws InternalErrorException { List children; if (root.isFolder()) { children = root.getChildren(); for (WorkspaceItem child : children) getStats(child, start, end); } else { try { List accounting = root.getAccounting(); for (AccountingEntry entry : accounting) { switch (entry.getEntryType()) { case CREATE: case UPDATE: case READ: Calendar calendar = entry.getDate(); if (calendar.after(Utils.dateToCalendar(start)) && calendar.before(Utils.dateToCalendar(end))) { count++; } break; default: break; } } } catch (Exception e) { logger.error("DataMethodDownloadHarvester: " + e.getLocalizedMessage()); throw new InternalErrorException(e.getLocalizedMessage()); } } } private static String getVREName(String vre) { Validate.notNull(vre, "scope must be not null"); String newName; if (vre.startsWith(JCRRepository.PATH_SEPARATOR)) newName = vre.replace(JCRRepository.PATH_SEPARATOR, "-").substring(1); else newName = vre.replace(JCRRepository.PATH_SEPARATOR, "-"); return newName; } }