/*******************************************************************************
 * Copyright (c) 2014 Elphel, Inc.
 * Copyright (c) 2006 Elphel, Inc and Excelsior, LLC.
 * This file is a part of VDT plug-in.
 * VDT plug-in is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * VDT plug-in 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.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 * 
 *  Additional permission under GNU GPL version 3 section 7:
 * If you modify this Program, or any covered work, by linking or combining it
 * with Eclipse or Eclipse plugins (or a modified version of those libraries),
 * containing parts covered by the terms of EPL/CPL, the licensors of this
 * Program grant you additional permission to convey the resulting work.
 * {Corresponding Source for a non-source form of such a combination shall
 * include the source code for the parts of Eclipse or Eclipse plugins used
 * as well as that of the covered work.}
 *******************************************************************************/
package com.elphel.vdt.ui.wizards.module;

import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.Status;

/**
 * This class provide information captured in the 'New Verilog Module' wizard
 * pages as entered by the user.
 * The information is the provided to other consumers when generating content so
 * that the content can be configured/customized according to the data.
 * 
 * Created: 16.12.2005
 * @author  Lvov Konstantin
 */

class ModuleData {

    private String locationPath;
    private String fileName;
    private String moduleName;
    private IFile  file = null;
    private ModulePort[] ports;
    
    public String getLocationPath() {
        return locationPath;
    }

    public void setLocationPath(String locationPath) {
        file = null;
        this.locationPath = locationPath;
    }

    public String getFileName() {
        return fileName;
    }

    public void setFileName(String fileName) {
        file = null;
        this.fileName = fileName;
    }

    public String getModuleName() {
        return moduleName;
    }

    public void setModuleName(String moduleName) {
        this.moduleName = moduleName;
    }
    
    public void setPorts(ModulePort[] ports) {
        this.ports = ports;
    }
    
    public ModulePort[] getPorts() {
        return ports;
    }
    
    public String getPureFileName() {
        if ((fileName == null) || (fileName.length() == 0))
            return "";
        int dot_pos = fileName.lastIndexOf(".");
        if (dot_pos == -1)
            return fileName;
        else
            return fileName.substring(0, dot_pos); 
    } // getPureFileName()
    
    public IFile getFile() throws CoreException {
        if (file != null)
            return file;
        IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
        IResource resource = root.findMember(new Path(locationPath));
        if (!resource.exists() || !(resource instanceof IContainer)) {
            throwCoreException("Container \"" + locationPath + "\" does not exist.");
        }
        IContainer container = (IContainer) resource;
        file = container.getFile(new Path(fileName));
        return file;
    } // isFileExists()     
        
    //-------------------------------------------------------------------------
    private void throwCoreException(String message) throws CoreException {
        IStatus status = new Status( IStatus.ERROR, "com.elphel.vdt.ui"
                                   , IStatus.OK, message, null );
        throw new CoreException(status);
    }
        
} // class ModuleData