// ============================================================================
//
// Copyright (C) 2006-2016 Talend Inc. - www.talend.com
//
// This source code is available under agreement available at
// %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt
//
// You should have received a copy of the agreement
// along with this program; if not, write to Talend SA
// 9 rue Pages 92150 Suresnes, France
//
// ============================================================================
package org.talend.mdm.repository.core.impl;
import java.util.List;
import org.talend.core.model.properties.FolderType;
import org.talend.core.model.properties.Item;
import org.talend.core.model.repository.IRepositoryViewObject;
import org.talend.mdm.repository.core.IRepositoryNodeContentProvider;
import org.talend.mdm.repository.extension.RepositoryNodeConfigurationManager;
import org.talend.mdm.repository.model.mdmproperties.ContainerItem;
import org.talend.mdm.repository.models.FolderRepositoryObject;
import org.talend.mdm.repository.utils.RepositoryResourceUtil;
/**
* DOC hbhong class global comment. Detailled comment <br/>
*
*/
public abstract class AbstractContentProvider implements IRepositoryNodeContentProvider {
public Object[] getChildren(Object element) {
Item item = RepositoryResourceUtil.getItemFromRepViewObj(element);
if (item != null && item instanceof ContainerItem) {
ContainerItem containerItem = (ContainerItem) item;
// recycle
if (RepositoryResourceUtil.isDeletedFolder(item, ((IRepositoryViewObject) element).getRepositoryObjectType())) {
AbstractContentProvider recycleContentProvider = (AbstractContentProvider) RepositoryNodeConfigurationManager
.getRecycleBinNodeConfiguration().getContentProvider();
return recycleContentProvider.getChildren(element);
}
//
FolderType containerType = containerItem.getType();
List<IRepositoryViewObject> children = ((FolderRepositoryObject) element).getChildren();
if (containerType == FolderType.SYSTEM_FOLDER_LITERAL) {
List<IRepositoryViewObject> viewObjects = getViewObjFromSystemFolder(containerItem);
if (viewObjects != null) {
children.clear();
children.addAll(viewObjects);
return viewObjects.toArray();
}
}
if (containerType == FolderType.FOLDER_LITERAL || containerType == FolderType.STABLE_SYSTEM_FOLDER_LITERAL) {
List<IRepositoryViewObject> viewObjects = getViewObjFromFolder(containerItem);
if (viewObjects != null) {
children.clear();
children.addAll(viewObjects);
return viewObjects.toArray();
}
}
// if (containerType == FolderType.STABLE_SYSTEM_FOLDER_LITERAL) {
// List<IRepositoryViewObject> children = ((ContainerRepositoryObject) element).getChildren();
// if (children != null) {
// return children.toArray();
// }
// }
}
return new Object[0];
}
protected abstract List<IRepositoryViewObject> getViewObjFromSystemFolder(Item parentItem);
protected List<IRepositoryViewObject> getViewObjFromFolder(ContainerItem containerItem) {
return RepositoryResourceUtil.findViewObjects(containerItem.getRepObjType(), containerItem);
}
public boolean isShownInRoot() {
return true;
}
}