/*
* Copyright (c) 2010-2012 Research In Motion Limited. All rights reserved.
*
* This program and the accompanying materials are made available
* under the terms of the Eclipse Public License, Version 1.0,
* which accompanies this distribution and is available at
*
* http://www.eclipse.org/legal/epl-v10.html
*
*/
package net.rim.ejde.internal.legacy;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
import net.rim.ejde.internal.core.ContextManager;
import net.rim.ejde.internal.model.BlackBerryProject;
import net.rim.ejde.internal.model.IModelConstants;
import net.rim.ejde.internal.util.FileUtils;
import net.rim.ide.Project;
import net.rim.ide.Workspace;
import net.rim.ide.core.IDEError;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
public final class Util implements IModelConstants.IArtifacts {
static private final Logger log = Logger.getLogger( Util.class );
private Util() {
}
static public Workspace getDefaultLegacyWorkspace() {
Workspace workspace = null;
File file = ILegacy.Workspace.getMetaFile();
try {
if( !file.exists() ) {
file.getParentFile().mkdirs();
file.createNewFile();
}
workspace = new Workspace( file );
save( workspace, true );
} catch( Throwable t ) {
log.error( t.getMessage(), t );
}
return workspace;
}
static public IStatus save( Workspace workspace, boolean prompt ) {
if( workspace == null ) {
log.error( "Workspace could not be saved. NULL workspace." );
return new Status( IStatus.ERROR, ContextManager.PLUGIN_ID, 1, "", null );
}
if( !workspace.getDirty() ) {
log.warn( "Tried to save an unchanged workspace" );
return Status.OK_STATUS;
}
File jdwFile = workspace.getFile();
if( jdwFile == null || !jdwFile.exists() ) {
log.error( "Workspace could not be saved. JDW file does not exist or is null" );
return new Status( IStatus.ERROR, ContextManager.PLUGIN_ID, 1, "", null );
}
boolean canChange = jdwFile.canWrite();
if( !canChange && prompt ) {
IStatus lStatus = FileUtils.canChange( jdwFile );
if( lStatus.isOK() ) {
try {
workspace.save();
} catch( IDEError e ) {
log.error( "Workspace could not be saved.", e );
return new Status( IStatus.ERROR, ContextManager.PLUGIN_ID, 1, "", e );
}
} else {
log.error( "Workspace could not be saved. User disallowed operation." );
return new Status( IStatus.ERROR, ContextManager.PLUGIN_ID, 1, "", null );
}
} else {
try {
workspace.save();
} catch( IDEError e ) {
log.error( "Workspace could not be saved.", e );
return new Status( IStatus.ERROR, ContextManager.PLUGIN_ID, 1, "", e );
}
}
return Status.OK_STATUS;
}
static public List< String > getSources( Project proj ) {
List< String > sources = new ArrayList< String >();
String udata = proj.getUserData();
StringTokenizer st = new StringTokenizer( udata, "|" );
String token;
while( st.hasMoreElements() ) {
token = st.nextToken();
if( StringUtils.isNotBlank( token ) ) {
sources.add( token );
}
}
return sources;
}
public Project getLegacyProject( Workspace legacyWorkspace, BlackBerryProject iproject ) {
return getLegacyProject( legacyWorkspace, iproject.getProject() );
}
public Project getLegacyProject( Workspace legacyWorkspace, IProject eclipseProject ) {
return getLegacyProject( legacyWorkspace, eclipseProject.getName() );
}
public Project getLegacyProject( Workspace legacyWorkspace, String eclipseProjectName ) {
if( null == legacyWorkspace ) {
return null;
}
if( StringUtils.isBlank( eclipseProjectName ) ) {
return null;
}
int count = legacyWorkspace.getNumProjects();
Project project = null;
for( int i = 0; i < count; i++ ) {
project = legacyWorkspace.getProject( i );
if( null != project && eclipseProjectName.equals( project.getDisplayName() ) ) {
return project;
}
}
return null;
}
public static void addProjectToWorkspaceNonDup( Workspace wksp, Project proj ) {
int np = wksp.getNumProjects();
Project oldproj;
File pfile = proj.getFile();
boolean isact;
for( int i = 0; i < np; i++ ) {
oldproj = wksp.getProject( i );
if( oldproj.getFile().equals( pfile ) ) {
if( proj != oldproj ) {
isact = wksp.isActiveProject( oldproj );
wksp.removeProject( oldproj );
try {
wksp.addProject( proj );
} catch( IDEError e ) {
log.error( e.getMessage(), e );
return;
}
if( isact )
wksp.setActiveProject( proj, "Release" );
return;
}
return;
}
}
try {
wksp.addProject( proj );
} catch( IDEError e ) {
log.error( e.getMessage(), e );
}
}
}