/*
* This program is free software; you can redistribute it and/or modify it under the
* terms of the GNU General Public License, version 2 as published by the Free Software
* Foundation.
*
* You should have received a copy of the GNU General Public License along with this
* program; if not, you can obtain a copy at http://www.gnu.org/licenses/gpl-2.0.html
* or from the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details.
*
*
* Copyright 2006 - 2016 Pentaho Corporation. All rights reserved.
*/
package org.pentaho.platform.repository.legacy.acl;
import org.pentaho.platform.api.engine.IAclHolder;
import org.pentaho.platform.api.engine.IFileFilter;
import org.pentaho.platform.api.engine.IPentahoAclEntry;
import org.pentaho.platform.api.engine.ISolutionFile;
import org.springframework.util.Assert;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
@Deprecated
public class LegacyRepositoryFile implements ISolutionFile, IAclHolder, Serializable {
private static final long serialVersionUID = -3181545217413101032L;
public static final char EXTENSION_CHAR = '.';
protected Serializable id;
private String fileName;
private String fullPath;
private long lastModified;
private boolean root;
private boolean directory;
private byte[] data;
private String solution;
private String solutionPath;
protected LegacyRepositoryFile parent;
private List<IPentahoAclEntry> accessControls = new ArrayList<IPentahoAclEntry>();
private Set childrenFiles = new TreeSet();
public LegacyRepositoryFile( String fileName, String fullPath, boolean directory ) {
Assert.notNull( fileName );
Assert.notNull( fullPath );
Assert.notNull( directory );
this.fileName = fileName;
this.fullPath = fullPath;
this.directory = directory;
}
@Override
public String getFileName() {
return fileName;
}
@Override
public String getFullPath() {
return fullPath;
}
@Override
public String getExtension() {
return hasExtension() ? fileName.substring( fileName.lastIndexOf( EXTENSION_CHAR ) ) : ""; //$NON-NLS-1$
}
@Override
public long getLastModified() {
return lastModified;
}
@Override
public boolean isDirectory() {
return directory;
}
@Override
public boolean isRoot() {
return root;
}
@Override
public byte[] getData() {
return data;
}
@Override
public String getSolution() {
return solution;
}
@Override
public String getSolutionPath() {
return solutionPath;
}
@Override
public List<IPentahoAclEntry> getAccessControls() {
return accessControls;
}
@Override
public void resetAccessControls( List<IPentahoAclEntry> arg0 ) {
this.accessControls = new ArrayList<IPentahoAclEntry>();
}
@Override
public void setAccessControls( List<IPentahoAclEntry> arg0 ) {
this.accessControls = arg0;
}
/**
* Chains up to find the access controls that are in force on this object. Could end up chaining all the way to
* the root.
*
* <p>
* Note that (1) defining no access control entries of your own and (2) removing all of your access control
* entries is indistiguishable in the current design. In #1, we chain up because we inherit. But in #2, it might
* be expected that by explicitly removing all access control entries, the chaining up ends. That is not the case
* in the current design.
* </p>
*/
@Override
public List<IPentahoAclEntry> getEffectiveAccessControls() {
List acls = this.getAccessControls();
if ( acls.size() == 0 ) {
LegacyRepositoryFile chain = this;
while ( !chain.isRoot() && ( acls.size() == 0 ) ) {
chain = (LegacyRepositoryFile) chain.retrieveParent();
acls = chain.getAccessControls();
}
}
return acls;
}
@Override
public boolean exists() {
return true;
}
@Override
public ISolutionFile[] listFiles() {
Set<ISolutionFile> files = getChildrenFiles();
return files.toArray( new ISolutionFile[] {} );
}
@Override
public ISolutionFile[] listFiles( IFileFilter filter ) {
List matchedFiles = new ArrayList();
Object[] objArray = getChildrenFiles().toArray();
for ( Object element : objArray ) {
if ( filter.accept( (ISolutionFile) element ) ) {
matchedFiles.add( element );
}
}
return (ISolutionFile[]) matchedFiles.toArray( new ISolutionFile[] {} );
}
@Override
public ISolutionFile retrieveParent() {
return parent;
}
@Override
public int hashCode() {
return id.hashCode();
}
@Override
public boolean equals( final Object other ) {
if ( this == other ) {
return true;
}
if ( !( other instanceof LegacyRepositoryFile ) ) {
return false;
}
final LegacyRepositoryFile that = (LegacyRepositoryFile) other;
return this.getId().equals( that.getId() );
}
public void setFileName( String fileName ) {
this.fileName = fileName;
}
public void setFullPath( String fullPath ) {
this.fullPath = fullPath;
}
public void setLastModified( long lastModified ) {
this.lastModified = lastModified;
}
public void setRoot( boolean root ) {
this.root = root;
}
public void setDirectory( boolean directory ) {
this.directory = directory;
}
public void setData( byte[] data ) {
this.data = data;
}
public void setSolution( String solution ) {
this.solution = solution;
}
public void setSolutionPath( String solutionPath ) {
this.solutionPath = solutionPath;
}
public Set getChildrenFiles() {
return childrenFiles;
}
public void setChildrenFiles( Set childrenFiles ) {
this.childrenFiles = childrenFiles;
}
private boolean hasExtension() {
return fileName.lastIndexOf( LegacyRepositoryFile.EXTENSION_CHAR ) != -1;
}
public Serializable getId() {
return id;
}
public void setId( String id ) {
this.id = id;
}
public LegacyRepositoryFile getParent() {
return parent;
}
public void setParent( LegacyRepositoryFile parent ) {
this.parent = parent;
}
public void setId( Serializable id ) {
this.id = id;
}
}