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
{
		return getStructureList( IMAGES_PROP );
	}
	/**
	 * Determines if the design has changed since it was last read from, or
	 * written to, the file. The dirty state reflects the action of the command
	 * stack. If the user saves the design and then changes it, the design is
	 * dirty. If the user then undoes the change, the design is no longer dirty.
	 * 
	 * @return <code>true</code> if the design has changed since the last load
	 *         or save; <code>false</code> if it has not changed.
	 */
	public boolean needsSave( )
	{
		String version = module.getVersionManager( ).getVersion( );
		if ( version != null )
		{
			List versionInfos = ModelUtil.checkVersion( version );
			if ( !versionInfos.isEmpty( ) )
				return true;
		}
		return module.isDirty( );
	}
	/**
	 * Calls to inform a save is successful. Must be called after a successful
	 * completion of a save done using <code>serialize</code>.
	 */
	public void onSave( )
	{
		module.onSave( );