All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.oodt.cas.filemgr.versioning.VersioningUtils Maven / Gradle / Ivy

Go to download

The file management component of a Catalog and Archive Service. This component purposefully separates data stores and metadata stores as standard interfaces, and provides some out of the box backend implementations of them (including one based on the javax.sql.DataSource interface). This component provides everything that you need to catalog, archive and manage files, and directories, and their associated metadata.

There is a newer version: 1.9.1
Show newest version
/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You 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.apache.oodt.cas.filemgr.versioning;

//OODT imports
import org.apache.commons.lang.StringUtils;
import org.apache.oodt.cas.filemgr.structs.Reference;
import org.apache.oodt.cas.filemgr.structs.Product;

//JDK imports
import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URLEncoder;
import java.util.Iterator;
import java.util.List;
import java.util.Stack;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 * @author mattmann
 * @author bfoster
 * @version $Revision$
 * 
 * 

* A Utility component to help out with versioning. *

* * */ public final class VersioningUtils { /* our log stream */ private static final Logger LOG = Logger.getLogger(VersioningUtils.class .getName()); // filter to only find directories when doing a listFiles private static FileFilter DIR_FILTER = new FileFilter() { public boolean accept(File file) { return file.isDirectory(); } }; // filter to only find files when doing a listFiles private static FileFilter FILE_FILTER = new FileFilter() { public boolean accept(File file) { return file.isFile(); } }; public static List getReferencesFromDir(File dirRoot) { List references = null; if (dirRoot == null) throw new IllegalArgumentException("null"); if (!dirRoot.isDirectory()) dirRoot = dirRoot.getParentFile(); references = new Vector(); Stack stack = new Stack(); stack.push(dirRoot); while (!stack.isEmpty()) { File dir = stack.pop(); // add the reference for the dir // except if it's the rootDir, then, skip it if (!dir.equals(dirRoot)) { try { Reference r = new Reference(); r.setOrigReference(dir.toURL().toExternalForm()); r.setFileSize(dir.length()); references.add(r); } catch (MalformedURLException e) { e.printStackTrace(); LOG.log(Level.WARNING, "MalformedURLException when generating reference for dir: " + dir); } } File[] files = dir.listFiles(FILE_FILTER); for (int i = 0; i < files.length; i++) { // add the file references try { Reference r = new Reference(); r.setOrigReference(files[i].toURL().toExternalForm()); r.setFileSize(files[i].length()); references.add(r); } catch (MalformedURLException e) { e.printStackTrace(); LOG.log(Level.WARNING, "MalformedURLException when generating reference for file: " + files[i]); } } File[] subdirs = dir.listFiles(DIR_FILTER); if (subdirs != null) for (int i = 0; i < subdirs.length; i++) { stack.push(subdirs[i]); } } return references; } public static List getURIsFromDir(File dirRoot) { List uris = null; if (dirRoot == null) throw new IllegalArgumentException("null"); if (!dirRoot.isDirectory()) dirRoot = dirRoot.getParentFile(); uris = new Vector(); Stack stack = new Stack(); stack.push(dirRoot); while (!stack.isEmpty()) { File dir = stack.pop(); // add the reference for the dir // except if it's the rootDir, then, skip it if (!dir.equals(dirRoot)) { uris.add(dir.toURI().toString()); } File[] files = dir.listFiles(FILE_FILTER); for (int i = 0; i < files.length; i++) { // add the file references uris.add(files[i].toURI().toString()); } File[] subdirs = dir.listFiles(DIR_FILTER); if (subdirs != null) for (int i = 0; i < subdirs.length; i++) { stack.push(subdirs[i]); } } return uris; } public static void createBasicDataStoreRefsHierarchical(List references) { // file:///www/folder1 // file:///www/folder1/file1 // file:///www/folder1/file2 // file:///www/folder1/folder2/ // file:///www/folder1/folder2/file3 // toDir: file:///www/myfolder/product1 // origDir: file:///www/folder1 String toDirRef = references.get(0) .getDataStoreReference(); String origDirRef = references.get(0).getOrigReference(); String origDirRefName = new File(origDirRef).getName(); for (Iterator i = references.iterator(); i.hasNext();) { Reference r = i.next(); // don't bother with the first one, because it's already set // correctly if (r.getOrigReference().equals(origDirRef)) { continue; } // get the first occurence of the origDir name in the string // then, the ref becomes: // toDir+r.getOrigRef.substring(first occurence of // origDir).substring(first occurence of '/'+1) String dataStoreRef = toDirRef; int firstOccurenceOfOrigDir = r.getOrigReference().indexOf( origDirRefName); String tmpRef = r.getOrigReference().substring( firstOccurenceOfOrigDir); LOG.log(Level.FINER, "tmpRef: " + tmpRef); int firstOccurenceSlash = tmpRef.indexOf("/"); dataStoreRef += tmpRef.substring(firstOccurenceSlash + 1); LOG.log(Level.FINE, "VersioningUtils: Generated data store ref: " + dataStoreRef + " from origRef: " + r.getOrigReference()); r.setDataStoreReference(dataStoreRef); } } public static void createBasicDataStoreRefsFlat(String productName, String productRepoPath, List references) { for (Iterator i = references.iterator(); i.hasNext();) { Reference r = i.next(); String dataStoreRef = null; String productRepoPathRef = null; try { productRepoPathRef = new File(new URI(productRepoPath)).toURL() .toExternalForm(); if (!productRepoPathRef.endsWith("/")) { productRepoPathRef += "/"; } dataStoreRef = productRepoPathRef + URLEncoder.encode(productName, "UTF-8") + "/" + new File(new URI(r.getOrigReference())).getName(); } catch (IOException e) { LOG.log(Level.WARNING, "VersioningUtils: Error generating dataStoreRef for " + r.getOrigReference() + ": Message: " + e.getMessage()); } catch (URISyntaxException e) { LOG.log(Level.WARNING, "VersioningUtils: Error generating dataStoreRef for " + r.getOrigReference() + ": Message: " + e.getMessage()); } LOG.log(Level.FINE, "VersioningUtils: Generated data store ref: " + dataStoreRef + " from origRef: " + r.getOrigReference()); r.setDataStoreReference(dataStoreRef); } } public static void createBasicDataStoreRefsStream(String productName, String productRepoPath, List references,String postfix) { for (Iterator i = references.iterator(); i.hasNext();) { Reference r = i.next(); createDataStoreRefStream(productName,productRepoPath,r,postfix); } } public static void createDataStoreRefStream(String pn, String productRepoPath, Reference ref, String postfix) { URI uri = URI.create(ref.getOrigReference()); String[] parts = (postfix.equals(""))?new String[] {uri.toString()}:new String[] {uri.toString(),postfix}; ref.setDataStoreReference(StringUtils.join(parts,Reference.STREAM_REFERENCE_DELIMITER)); } public static void addRefsFromUris(Product p, List uris) { // add the refs to the Product for (Iterator i = uris.iterator(); i.hasNext();) { String ref = i.next(); Reference r = new Reference(ref, null, (p.getProductStructure().equals(Product.STRUCTURE_STREAM)?-1:quietGetFileSizeFromUri(ref))); p.getProductReferences().add(r); } } public static String getAbsolutePathFromUri(String uriStr) { URI uri = null; String absPath = null; try { uri = new URI(uriStr); absPath = new File(uri).getAbsolutePath(); } catch (URISyntaxException e) { LOG.log(Level.WARNING, "URISyntaxException getting URI from URI str: [" + uriStr + "]"); } return absPath; } private static long quietGetFileSizeFromUri(String uri) { File fileRef = null; try { fileRef = new File(new URI(uri)); } catch (URISyntaxException e) { LOG.log(Level.WARNING, "URISyntaxException when getting file size from uri: [" + uri + "]: Message: " + e.getMessage()); return -1L; } return fileRef.length(); } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy