/*! ****************************************************************************** * * Pentaho Data Integration * * Copyright (C) 2002-2013 by Pentaho : http://www.pentaho.com * ******************************************************************************* * * 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.pentaho.di.ui.repository.repositoryexplorer.model; import java.util.Comparator; import java.util.Date; import org.pentaho.di.repository.IRepositoryService; import org.pentaho.di.repository.ObjectId; import org.pentaho.di.repository.Repository; import org.pentaho.di.repository.RepositoryObjectInterface; import org.pentaho.di.repository.RepositoryObjectType; import org.pentaho.ui.xul.util.AbstractModelNode; public abstract class UIRepositoryObject extends AbstractModelNode<UIRepositoryObject> { private static final long serialVersionUID = -456272921332284281L; // This object can be a Directory or a RepositoryContent protected RepositoryObjectInterface obj; protected Repository rep; private RepositoryObjectComparator roc; private static final DateObjectComparator doc = new DateObjectComparator(); private IRepositoryService repositoryService; public UIRepositoryObject() { super(); roc = new RepositoryObjectComparator(); } public UIRepositoryObject( RepositoryObjectInterface obj ) { this(); this.obj = obj; } public UIRepositoryObject( RepositoryObjectInterface obj, Repository rep ) { this( obj ); this.rep = rep; } public String getId() { if ( obj != null && obj.getObjectId() != null ) { return obj.getObjectId().getId(); } else { return null; } } public ObjectId getObjectId() { return obj.getObjectId(); } public String getName() { return obj.getName(); } public abstract void setName( String name ) throws Exception; public abstract void move( UIRepositoryDirectory newParentDir ) throws Exception; public abstract void delete() throws Exception; public abstract Date getModifiedDate(); public abstract String getFormatModifiedDate(); public abstract String getModifiedUser(); public abstract RepositoryObjectType getRepositoryElementType(); public abstract String getType(); public abstract String getDescription(); public abstract UIRepositoryDirectory getParent(); public String getParentPath() { return getParent() != null ? getParent().getPath() : null; } public boolean isDeleted() { return false; } public abstract String getImage(); public Repository getRepository() { return rep; } public void setRepository( Repository rep ) { this.rep = rep; } static class DateObjectComparator implements Comparator<UIRepositoryObject> { @Override public int compare( UIRepositoryObject o1, UIRepositoryObject o2 ) { Date d1 = o1 != null ? o1.getModifiedDate() : null; Date d2 = o2 != null ? o2.getModifiedDate() : null; long t1 = d1 != null ? d1.getTime() : 0; long t2 = d2 != null ? d2.getTime() : 0; int res = 0; if ( t1 > t2 ) { res = 1; } else if ( t1 < t2 ) { res = -1; } return res; } } static class RepositoryObjectComparator implements Comparator<UIRepositoryObject> { public int compare( UIRepositoryObject o1, UIRepositoryObject o2 ) { int cat1 = o1.getCategory(); int cat2 = o2.getCategory(); if ( cat1 != cat2 ) { return cat1 - cat2; } String t1 = o1.getName(); String t2 = o2.getName(); if ( t1 == null ) { t1 = ""; } if ( t2 == null ) { t2 = ""; } return t1.compareToIgnoreCase( t2 ); } } public String getPath() { return getParentPath() + "/" + getName(); } public RepositoryObjectComparator getComparator() { return roc; } public void setComparator( RepositoryObjectComparator roc ) { this.roc = roc; } public DateObjectComparator getDateComparator() { return UIRepositoryObject.doc; } public IRepositoryService getRepositoryService() { return repositoryService; } public void setRepositoryService( IRepositoryService repositoryService ) { this.repositoryService = repositoryService; } public abstract int getCategory(); }