/******************************************************************************* * Copyright (c) 2014, 2015 Cisco Systems, Inc. and others. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html * *******************************************************************************/ package com.cisco.yangide.core.model; import java.util.ArrayList; import java.util.Map; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResourceVisitor; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import com.cisco.yangide.core.IOpenable; import com.cisco.yangide.core.OpenableElementInfo; import com.cisco.yangide.core.YangCorePlugin; import com.cisco.yangide.core.YangModelException; /** * @author Konstantin Zaitsev * @date Jun 24, 2014 */ public class YangFolder extends YangElement { public static final String YANG_EXTENSION = "yang"; private IResource resource; /** * @param resource * @param parent */ public YangFolder(IResource resource, IOpenable parent) { super(parent); this.resource = resource; } @Override public IResource getResource() { return resource; } @Override public IPath getPath() { return resource.getFullPath().makeRelativeTo(getParent().getPath()); } @Override protected boolean buildStructure(OpenableElementInfo info, IProgressMonitor pm, Map<IOpenable, OpenableElementInfo> newElements, IResource underlyingResource) throws YangModelException { final ArrayList<IOpenable> result = new ArrayList<IOpenable>(); try { resource.accept(new IResourceVisitor() { public boolean visit(IResource res) throws CoreException { if (res.getType() == IResource.FILE && YANG_EXTENSION.equalsIgnoreCase(res.getFullPath().getFileExtension())) { result.add(new YangFile((IFile) res, YangFolder.this)); } return true; } }, IResource.DEPTH_ONE, false); } catch (CoreException e) { throw new YangModelException(e); } info.setChildren((IOpenable[]) result.toArray(new IOpenable[result.size()])); return true; } @Override protected IStatus validateExistence(IResource underlyingResource) { return underlyingResource.exists() && underlyingResource.isAccessible() ? Status.OK_STATUS : new Status( Status.ERROR, YangCorePlugin.PLUGIN_ID, "Does not exist"); } @Override public YangElementType getElementType() { return YangElementType.YANG_FOLDER; } }