/*******************************************************************************
 * Copyright (c) 2007 Exadel, Inc. and Red Hat, Inc.
 * Distributed under license by Red Hat, Inc. All rights reserved.
 * This program is 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
 *
 * Contributors:
 *     Exadel, Inc. and Red Hat, Inc. - initial API and implementation
 ******************************************************************************/ 
package org.jboss.tools.common.model.filesystems;

import org.jboss.tools.common.model.*;
import org.jboss.tools.common.model.filesystems.impl.*;

public class FileAuxiliary {
    public static String AUX_FILE_ENTITY = "FileAnyAuxiliary"; //$NON-NLS-1$
    String extension = ""; //$NON-NLS-1$
    boolean replaceExtension = true;
    boolean addLeadingDot = true;

    public FileAuxiliary(String extension, boolean replaceExtension) {
    	this.extension = extension;
    	this.replaceExtension = replaceExtension;
   	}

    public String read(XModelObject folder, XModelObject main) {
        FileAnyAuxiliaryImpl f = getAuxiliaryFile(folder, main, false);
        if(f == null) return null;
        BodySource bs = f.getBodySource();
        return (bs == null) ? null : bs.get();
    }

    public boolean write(XModelObject folder, XModelObject main, XModelObject object) {
        FileAnyAuxiliaryImpl f = getAuxiliaryFile(folder, main, true);
        if(f == null) return false;
        BodySource bs = f.getBodySource();
        return (bs != null && bs.write(object));
    }

    public FileAnyAuxiliaryImpl getAuxiliaryFile(XModelObject folder, XModelObject main, boolean create) {
        if(folder==null) return null;
    	String name = getAuxiliaryName(main);
        String p = name + "." + extension; //$NON-NLS-1$
        XModelObject f = folder.getChildByPath(p);
        if(!(f instanceof FileAnyAuxiliaryImpl)) {
            if(!create) return null;
            f = folder.getModel().createModelObject(AUX_FILE_ENTITY, null);
            f.setAttributeValue(XModelObjectConstants.ATTR_NAME, name);
            f.setAttributeValue(XModelObjectConstants.ATTR_NAME_EXTENSION, extension);
            folder.addChild(f);
        }
        FileAnyAuxiliaryImpl aux = (FileAnyAuxiliaryImpl)f;
        aux.setMainObject(main);
        aux.setAuxiliaryHelper(this);
        return aux;
    }
    
    public String getMainName(XModelObject aux) {
    	String auxname = aux.getAttributeValue(XModelObjectConstants.ATTR_NAME);
    	if(replaceExtension) return auxname;
		int i = auxname.lastIndexOf('.');
		String s = (i < 0) ? auxname : auxname.substring(0, i);
		if(addLeadingDot && s.startsWith(".")) s = s.substring(1); //$NON-NLS-1$
		return s;
    }
    
    public String getAuxiliaryName(XModelObject main) {
		String name = main.getAttributeValue(XModelObjectConstants.ATTR_NAME);
		if(!replaceExtension) name += "." + main.getAttributeValue(XModelObjectConstants.ATTR_NAME_EXTENSION); //$NON-NLS-1$
		if(addLeadingDot) name = "." + name; //$NON-NLS-1$
		return name;
    }
    
}
