Bug 152686 URL strings are not handled consistently in Report Design API
Using todays BIRT source cvs head, and 1.4 compiler compliance. What I'm seeing is the following: If I make the following report manipulation calls using BIRT API. String REPORT_LOC = "file:/c:/temp/birtbug/report.rptdesign"; DesignEngine designEngine = new DesignEngine(new DesignConfig()); SessionHandle session = designEngine.newSessionHandle(ULocale.getDefault()); //this works using a URL string design = session.openDesign(REPORT_LOC); ... do some work on the design and then call design.save() design.save calls XMLWriter( File outputFile, String signature ) in here the writer constructor tries to open a stream = new FileOutputStream( outputFile ); But this will fail, because the outputFile is a URL string and throws an exception. Expected: The report manipulation api, needs to handle URL strings consistently, or they need to seperate out the API to deal with URLS to reports seperately from api that just deals with java File objects.
model/org.eclipse.birt.report.model/src/org/eclipse/birt/report/model/api/ModuleHandle.java
public void replaceImage( EmbeddedImage oldVar, EmbeddedImage newVar )
			throws SemanticException
	{
		replaceObjectInList( IMAGES_PROP, oldVar, newVar );
	}
	/**
	 * Replaces an old object in the structure list with the given new one.
	 * 
	 * @param propName
	 *            the name of the property that holds a structure list
	 * @param oldVar
	 *            an existed object in the list
	 * @param newVar
	 *            a new object
	 * @throws SemanticException
	 *             if the old object is not found or the name of new one is
	 *             empty.
	 */
	private void replaceObjectInList( String propName, Object oldVar,
			Object newVar ) throws SemanticException
	{
		ElementPropertyDefn propDefn = module.getPropertyDefn( propName );
		PropertyCommand cmd = new PropertyCommand( module, getElement( ) );
		cmd.replaceItem( new CachedMemberRef( propDefn ), (Structure) oldVar,
				(Structure) newVar );
	}
	/**
	 * Saves the module to an existing file name. Call this only when the file
	 * name has been set.
	 *