/*******************************************************************************
* 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.options.impl;
import java.io.*;
import java.util.*;
import org.jboss.tools.common.model.*;
import org.jboss.tools.common.model.options.*;
class XStudioLoaderPeer implements SharableConstants {
private static final XStudioLoaderPeer instance = new XStudioLoaderPeer();
public static XStudioLoaderPeer instance() {
return instance;
}
private Hashtable<String,File[]> paths = new Hashtable<String,File[]>(3);
private boolean isLoadingOn;
private XStudioLoaderPeer() {}
public void init(XModelObject studio) {
XModel model = studio.getModel();
String r = XModelConstants.getWorkspace(model) + XModelObjectConstants.SEPARATOR;
for (int i = 0; i < LIST.length; i++) {
String[] fns = FILE_LIST[i];
File[] fs = new File[fns.length];
for (int j = 0; j < fs.length; j++) fs[j] = new File(r + FILE_LIST[i][j]);
paths.put(LIST[i], fs);
}
}
void setIsLoadingOn(boolean b) {
isLoadingOn = b;
}
File[] getFilesForScope(String scope) {
return paths.get(scope);
}
public File getProjectPreferencesFile() {
File[] fs = getFilesForScope(SharableConstants.PROJECT);
return (fs != null && fs.length > 1) ? fs[1] : null;
}
public boolean isScopeEditable(String scope) {
if(isLoadingOn) return true;
if(GENERAL.equals(scope)) return false;
File[] f = getFilesForScope(scope);
if(f == null) return false;
for (int i = 0; i < f.length; i++)
if(f[i].exists() && !f[i].canWrite()) return false;
return true;
}
// util
public static String getMaxScope(String s1, String s2) {
int i1 = range(s1), i2 = range(s2);
return (i1 > i2) ? s1 : s2;
}
private static int range(String scope) {
for (int i = 0; i < LIST.length; i++)
if(LIST[i].equals(scope)) return i;
return -1;
}
}