FileDocCategorySizeDatePackage
Customizer.javaAPI DocJMF 2.1.1e24400Mon May 12 12:21:00 BST 2003com.sun.media.customizer

Customizer

public class Customizer extends JFrame implements TokenDef, ActionListener
This is the main class of JMF Customizer, which controls the wizard GUI flow. It will lead the users to go through several pages to select their desired DataSource/protocol, media formats, codecs, renderers and multiplexers. Finally, when the last page is reached and button customize is clicked, a dialog box will be popped up to report the progress of customizing.
version
2.0

Fields Summary
public static final String
ACTION_FINISH
public static final String
ACTION_CANCEL
public static final String
ACTION_NEXT
public static final String
ACTION_BACK
public static final String
ACTION_HELP
public static final int
GENERAL
public static final int
PROTOCOL
public static final int
MFORMAT
public static final int
MUX
public static final int
CODEC
public static final int
RENDERER
private String
strResultAction
private JPanel
panelPages
private JButton
buttonBack
private JButton
buttonNext
private JButton
buttonFinish
private JButton
buttonCancel
private JButton
buttonHelp
private Vector
vectorPages
private JPanel
panelCurPage
private JPanel
oldPage
private boolean
bypassMux
private boolean
bypassMFormat
private boolean
showHelp
private HelperDiag
helpDlg
private boolean[]
resultFunc
private boolean[]
resultProtocol
private boolean[]
resultMFormat
private boolean[]
resultCodec
private boolean[]
resultRndr
private boolean[]
resultMux
private int
xx
private int
yy
private int
ww
private int
hh
private CusRegistry
theRegistry
int
release
Constructors Summary
public Customizer(String strTitle, int x, int y, int w, int h, CusRegistry theRegistry)


                  
	super(strTitle);
	this.theRegistry = theRegistry;
	init();
        createPages();
	xx = x;
	yy = y;
	ww = w;
	hh = h;
	this.setSize(ww,hh);
	this.setLocation(xx, yy);

	this.show();

    
Methods Summary
public voidactionPerformed(java.awt.event.ActionEvent event)

    	String		strCmd;

    	strCmd = event.getActionCommand ();
	if ( strCmd.equals(ACTION_CANCEL)) {
	    System.exit(0);
	} else if (strCmd.equals(ACTION_FINISH)) {
	    if ( onPageDone(panelCurPage) == false )
		return;
	    onFinish();
	    setPage(getFirstPage());
	    return;
	} else if ( strCmd.equals(ACTION_BACK) ) {
    	    setPrevPage ();
    	} else if ( strCmd.equals(ACTION_NEXT) ) {
    	    setNextPage ();
    	} else if ( strCmd.equals(ACTION_HELP) ) {
	    showHelp = true;
	    buttonHelp.setEnabled(false);
	    int idx = vectorPages.indexOf ( panelCurPage );
	    if (idx < 0 || idx > 5 )
		idx = 0;
	    helpDlg = new HelperDiag(this, idx);
	    helpDlg.setLocation(50,50);
	    helpDlg.setSize(320,400);
	    helpDlg.setResizable(true);
	    helpDlg.show();
	}
	    
    
public voidcreatePages()

        vectorPages = new Vector();
	vectorPages.addElement(new GeneralPane(this));
	vectorPages.addElement(new ProtocolPane());
        vectorPages.addElement(new MFormatPane());
	vectorPages.addElement(new MuxPane());
	vectorPages.addElement(new CodecPane());
	vectorPages.addElement(new RendererPane());
	
	oldPage = panelCurPage = null;
	setNextPage();
    
private javax.swing.JPanelcreatePanelButtons()

	JPanel panel;
	JPanel panelButtons;

	// outerPanel = new JPanel ( new BorderLayout());

	// panelButtons = new JPanel( new FlowLayout(FlowLayout.RIGHT));

	// panel = new JPanel( new GridLayout(1,0,0,0));
	panel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
	panel.setBackground(Color.lightGray);
	// panelButtons.add(panel);

	buttonHelp = new JButton(ACTION_HELP);
	buttonHelp.addActionListener(this);
	// panel.add(buttonHelp);

	buttonBack = new JButton(ACTION_BACK);
	buttonBack.addActionListener(this);
	panel.add(buttonBack);

	buttonNext = new JButton(ACTION_NEXT);
	buttonNext.addActionListener(this);
	panel.add(buttonNext);

	buttonFinish = new JButton (ACTION_FINISH);
	buttonFinish.addActionListener(this);
	panel.add(buttonFinish);

	buttonCancel = new JButton (ACTION_CANCEL);
	buttonCancel.addActionListener(this);
	panel.add(buttonCancel);
	panel.add(buttonHelp);

	return panel;
	// return panelButtons;
    
public voiddismissHelp()

	showHelp = false;
	buttonHelp.setEnabled(true);
    
protected int[]figureoutSelected()

	
	resultFunc = ((GeneralPane)vectorPages.elementAt(GENERAL)).getState();
	resultProtocol = ((ProtocolPane)vectorPages.elementAt(PROTOCOL)).getState();
	resultProtocol[ProtocolPane.RTP] |= resultProtocol[ProtocolPane.RTSP];
	resultMFormat = ((MFormatPane)vectorPages.elementAt(MFORMAT)).getState();
	resultCodec= ((CodecPane)vectorPages.elementAt(CODEC)).getState();
	resultRndr = ((RendererPane)vectorPages.elementAt(RENDERER)).getState();
	resultMux = ((MuxPane)vectorPages.elementAt(MUX)).getState();

	int[] result = new int[192];
	int p = 0;
	boolean sinkfile = false;

	// main function
	if (resultFunc[GeneralPane.GUI]) 
	    result[p++] = GUI;
	if (resultFunc[GeneralPane.STUDIO]) {
	    result[p++] = STUDIO;
	    result[p++] = PLYRBEAN;
	    result[p++] = MPLYR;
	}

	if ( resultFunc[GeneralPane.BEAN] ){
	    result[p++] = PLYRBEAN;
	    result[p++] = MPLYR;
	}
	
	if ( resultFunc[GeneralPane.RTPREC] ||
	     resultFunc[GeneralPane.CAPTURE] ||
	     resultFunc[GeneralPane.RTPTRANS] ||
	     resultFunc[GeneralPane.TRANSCODE] )
	    result[p++] = NOTPB;

	if (resultFunc[GeneralPane.RTPTRANS] && resultProtocol[ProtocolPane.RTP])
	    result[p++] = SINKRTP;
	
	// wpp or spp?
	//if ( release == 2 )
	//   result[p++] = SPP;

	//if ( release == 3)
	//  result[p++] = WPP;

	// protocol
	boolean vcb1 = false;
	boolean acb1 = false;

	if (resultProtocol[ProtocolPane.FILE])
	    result[p++] = DSFILE;

	if (resultProtocol[ProtocolPane.HTTP])
	    result[p++] = DSHTTP;

	if (resultProtocol[ProtocolPane.HTTPS])
	    result[p++] = DSHTTPS;

	if (resultProtocol[ProtocolPane.FTP])
	    result[p++] = DSFTP;

	if (resultProtocol[ProtocolPane.JAVASOUND]) {
	    result[p++] = DSJS;
	    acb1 = true;
	}

	if (resultProtocol[ProtocolPane.RTP])
	    result[p++] = RTP;

	if (resultProtocol[ProtocolPane.RTSP])
	    result[p++] = RTSP;
	
	if (resultProtocol[ProtocolPane.VFW]) {
	    result[p++] = VFW;
	    result[p++] = VCMND;
	    vcb1 = true;
	}

	if (resultProtocol[ProtocolPane.DSOUND]) {
	    result[p++] = DSOUND;
	    acb1 = true;
	}

	if (resultProtocol[ProtocolPane.SVDO]) {
	    result[p++] = SVDO;
	    vcb1 = true;
	}

	if (resultProtocol[ProtocolPane.SVDOPLS]) {
	    result[p++] = SVDOPLS;
	    vcb1 = true;
	}

	if (resultProtocol[ProtocolPane.CLNMGDS] ||
	    ( vcb1 && acb1) )
	    result[p++] = CLNMGDS;

	// media format -- parser
	if ( resultMFormat[MFormatPane.AU]) 
	    result[p++] = AUPSR;

	if ( resultMFormat[MFormatPane.AIFF]) 
	    result[p++] = AIFFPSR;

	if ( resultMFormat[MFormatPane.GSM]) 
	    result[p++] = GSMPSR;

	if ( resultMFormat[MFormatPane.MP2] || resultMFormat[MFormatPane.MP3]) 
	    result[p++] = MPEGPSR;

	if ( resultMFormat[MFormatPane.WAV]) 
	    result[p++] = WAVPSR;

	if ( resultMFormat[MFormatPane.MOV]) 
	    result[p++] = QTPSR;

	if ( resultMFormat[MFormatPane.AVI]) 
	    result[p++] = AVIPSR;

	if ( resultMFormat[MFormatPane.MPEG]) 
	    result[p++] = MPEGPSR;

	if ( resultMFormat[MFormatPane.MVR]) 
	    result[p++] = MVR;

	if ( resultMFormat[MFormatPane.MIDI]) 
	    result[p++] = MIDI;

	if ( resultMFormat[MFormatPane.RMF]) 
	    result[p++] = RMF;
	
	if (resultMFormat[MFormatPane.CDAUDIO])
	    result[p++] = CDAUDIO;

	// codec Decoders
	if ( resultCodec[CodecPane.MPAJD] )
	    result[p++] = MPAJD;
	if ( resultCodec[CodecPane.ULAWJD] || resultRndr[RendererPane.SUNAUDIO])
	    result[p++] = ULAWJD;
	if ( resultCodec[CodecPane.MSGSMJD] )
	    result[p++] = MSGSMJD;
	if ( resultCodec[CodecPane.GSMJD] )
	    result[p++] = GSMJD;
	if ( resultCodec[CodecPane.ALAWJD] )
	    result[p++] = ALAWJD;
	if ( resultCodec[CodecPane.MSIMA4JD] )
	    result[p++] = MSIMA4JD;
	if ( resultCodec[CodecPane.IMA4JD] )
	    result[p++] = IMA4JD;
	if ( resultCodec[CodecPane.DVIJD] )
	    result[p++] = DVIJD;
	if ( resultCodec[CodecPane.G723JD] )
	    result[p++] = G723JD;
	if ( resultCodec[CodecPane.MSADPCMJD] )
	    result[p++] = MSADPCMJD;
	if ( resultCodec[CodecPane.MPAND] )
	    result[p++] = MPAND;
	if ( resultCodec[CodecPane.MSGSMND] )
	    result[p++] = MSGSMND;
	if ( resultCodec[CodecPane.GSMND] )
	    result[p++] = GSMND;
	if ( resultCodec[CodecPane.G723ND] )
	    result[p++] = G723ND;
	if ( resultCodec[CodecPane.ACMND] )
	    result[p++] = ACM;
	if ( resultCodec[CodecPane.CINEPAKJD] )
	    result[p++] = CINEPAKJD;
	if ( resultCodec[CodecPane.H263JD] )
	    result[p++] = H263JD;
	if ( resultCodec[CodecPane.CINEPAKND] )
	    result[p++] = CINEPAKND;
	if ( resultCodec[CodecPane.H263ND] )
	    result[p++] = H263ND;
	if ( resultCodec[CodecPane.H261ND] )
	    result[p++] = H261ND;
	if ( resultCodec[CodecPane.JPEGND] )
	    result[p++] = JPEGND;
	if ( resultCodec[CodecPane.MPEGND] )
	    result[p++] = MPEGND;
	if ( resultCodec[CodecPane.IV32ND] && release == 3 ) {
	    result[p++] = IV32ND;
	    result[p++] = VCMND;
	}
	if ( resultCodec[CodecPane.MPEGPLY] && release == 2 ) {
	    result[p++] = SMPEGPLY;
	    // jpmx always use javasound renderer
	    result[p++] = JSRENDER;
	}

	if ( resultCodec[CodecPane.MPEGPLY] && release == 3 )
	    result[p++] = WMPEGPLY;
	if ( resultCodec[CodecPane.VCMND] )
	    result[p++] = VCMND;

	// codec Encoders
	if ( resultCodec[CodecPane.ULAWJE] || resultRndr[RendererPane.SUNAUDIO] )
	    result[p++] = ULAWJE;
	if ( resultCodec[CodecPane.MSGSMJE] )
	    result[p++] = MSGSMJE;
	if ( resultCodec[CodecPane.GSMJE] )
	    result[p++] = GSMJE;
	if ( resultCodec[CodecPane.MSIMA4JE] )
	    result[p++] = MSIMA4JE;
	if ( resultCodec[CodecPane.IMA4JE] )
	    result[p++] = IMA4JE;
	if ( resultCodec[CodecPane.DVIJE] )
	    result[p++] = DVIJE;
	if ( resultCodec[CodecPane.MPANE] )
	    result[p++] = MPANE;
	if ( resultCodec[CodecPane.MSGSMNE] )
	    result[p++] = MSGSMNE;
	if ( resultCodec[CodecPane.GSMNE] )
	    result[p++] = GSMNE;
	if ( resultCodec[CodecPane.G723NE] )
	    result[p++] = G723NE;
	if ( resultCodec[CodecPane.ACMNE] )
	    result[p++] = ACM;
	if ( resultCodec[CodecPane.CINEPAKPRONE] )
	    result[p++] = CINEPAKPRONE;
	if ( resultCodec[CodecPane.H263NE] )
	    result[p++] = H263NE;
	if ( resultCodec[CodecPane.JPEGNE] )
	    result[p++] = JPEGNE;
	if ( resultCodec[CodecPane.VCMNE] )
	    result[p++] = VCMNE;

	// codec depaketizer
	if ( resultCodec[CodecPane.MPADRTP] )
	    result[p++] = MPADRTP;
	if ( resultCodec[CodecPane.ULAWDRTP] )
	    result[p++] = ULAWDRTP;
	if ( resultCodec[CodecPane.GSMDRTP] )
	    result[p++] = GSMDRTP;
	if ( resultCodec[CodecPane.DVIDRTP] )
	    result[p++] = DVIDRTP;
	if ( resultCodec[CodecPane.G723DRTP] )
	    result[p++] = G723DRTP;
	if ( resultCodec[CodecPane.H263DRTP] )
	    result[p++] = H263DRTP;
	if ( resultCodec[CodecPane.H261DRTP] )
	    result[p++] = H261DRTP;
	if ( resultCodec[CodecPane.JPEGDRTP] )
	    result[p++] = JPEGDRTP;
	if ( resultCodec[CodecPane.MPEGDRTP] )
	    result[p++] = MPEGDRTP;

	// codec packetizer
	if ( resultCodec[CodecPane.MPAPRTP] )
	    result[p++] = MPAPRTP;
	if ( resultCodec[CodecPane.ULAWPRTP] )
	    result[p++] = ULAWPRTP;
	if ( resultCodec[CodecPane.GSMPRTP] )
	    result[p++] = GSMPRTP;
	if ( resultCodec[CodecPane.DVIPRTP] )
	    result[p++] = DVIPRTP;
	if ( resultCodec[CodecPane.G723PRTP] )
	    result[p++] = G723PRTP;
	if ( resultCodec[CodecPane.H263PRTP] )
	    result[p++] = H263PRTP;
	if ( resultCodec[CodecPane.JPEGPRTP] )
	    result[p++] = JPEGPRTP;
	if ( resultCodec[CodecPane.MPEGPRTP] )
	    result[p++] = MPEGPRTP;

	// renderer
	if ( resultRndr[RendererPane.SUNAUDIO])
	    result[p++] = SUNARENDER;

	if ( resultRndr[RendererPane.JAVASOUND])
	    result[p++] = JSRENDER;

	if ( resultRndr[RendererPane.DAUDIO])
	    result[p++] = DARENDER;

	if ( resultRndr[RendererPane.AWT])
	    result[p++] = AWTRNDR;

	if ( resultRndr[RendererPane.JPEG])
	    result[p++] = JPEGRNDR;

	if ( resultRndr[RendererPane.XLIB])
	    result[p++] = XLIBRNDR;

	if ( resultRndr[RendererPane.XIL])
	    result[p++] = XILRNDR;

	if ( resultRndr[RendererPane.SUNRAY])
	    result[p++] = SUNRAYRNDR;

	if ( resultRndr[RendererPane.DDRAW])
	    result[p++] = DDRNDR;

	if ( resultRndr[RendererPane.GDI])
	    result[p++] = GDIRNDR;

	// mux
	if (resultMux[MuxPane.GSM]) {
	    sinkfile = true;
	    result[p++] = GSMMUX;
	}

	if (resultMux[MuxPane.MP2] || resultMux[MuxPane.MP3]){ 
	    sinkfile = true;
	    result[p++] = MPEGMUX;
	}

	if (resultMux[MuxPane.WAV]) {
	    sinkfile = true;
	    result[p++] = WAVMUX;
	}

	if (resultMux[MuxPane.AIFF]) {
	    sinkfile = true;
	    result[p++] = AIFFMUX;
	}

	if (resultMux[MuxPane.AU]) {
	    sinkfile = true;
	    result[p++] = AUMUX;
	}

	if (resultMux[MuxPane.MOV]) {
	    sinkfile = true;
	    result[p++] = QTMUX;
	}

	if (resultMux[MuxPane.AVI]) {
	    sinkfile = true;
	    result[p++] = AVIMUX;
	}

	// transcode
	if (sinkfile && resultFunc[GeneralPane.TRANSCODE])
	    result[p++] = SINKFILE;

	
	// final params to ProcessJAR
	int[] selected = new int[p];

	for ( int i = 0; i < p; i++) {
	    selected[i] = result[i];
	}
	
	return (selected);
    
public java.lang.StringgetAction()

	return strResultAction;
    
public javax.swing.JPanelgetCurrentPage()

	return panelCurPage;
    
protected javax.swing.JPanelgetFirstPage()

	JPanel panelPage = null;

    	if ( vectorPages != null  &&  !vectorPages.isEmpty() ) {
    	    panelPage = (JPanel) vectorPages.firstElement();
    	}
    	return ( panelPage );
    
protected javax.swing.JPanelgetLastPage()

    	JPanel	panelPage = null;

    	if ( vectorPages != null  &&  !vectorPages.isEmpty() ) {
    	    panelPage = (JPanel) vectorPages.lastElement();
    	}
    	return ( panelPage );
    
protected javax.swing.JPanelgetNextPage(javax.swing.JPanel panelPage)

    	int		nIndex;
    	JPanel	panelPageNext = null;

    	if ( panelPage == null ) {
    	    panelPageNext = getFirstPage ();
    	}
    	else if ( vectorPages != null  &&  !vectorPages.isEmpty() ) {

	    if ( panelPage instanceof ProtocolPane) {
		resultFunc = ((GeneralPane)vectorPages.elementAt(GENERAL)).getState();
		// don't want to load media from stored files
		if ( !resultFunc[GeneralPane.MFILE]) {
		    ((MFormatPane)vectorPages.elementAt(MFORMAT)).disableAll();
		    bypassMFormat = true;

		    // don't want to transcode
		    if (!resultFunc[GeneralPane.TRANSCODE]) {
			bypassMux = true;
			panelPageNext = (CodecPane)vectorPages.elementAt(CODEC);
		    } else {
			panelPageNext = (MuxPane)vectorPages.elementAt(MUX);
		    }
		    return (panelPageNext);
		}

	    }

	    if ( panelPage instanceof MFormatPane) {
		resultFunc = ((GeneralPane)vectorPages.elementAt(GENERAL)).getState();
		// don't want to transcode
		if ( !resultFunc[GeneralPane.TRANSCODE]) {
		    ((MuxPane)vectorPages.elementAt(MUX)).disableAll();
		    panelPageNext = (CodecPane)vectorPages.elementAt(CODEC);
		    bypassMux = true;
		    return (panelPageNext);
		}

	    }


    	    nIndex = vectorPages.indexOf ( panelPage );
    	    if ( nIndex >= 0  &&  nIndex < vectorPages.size() - 1 )
    	    	panelPageNext = (JPanel) vectorPages.elementAt( nIndex + 1 );
    	}
    	return ( panelPageNext );
    
protected javax.swing.JPanelgetPrevPage(javax.swing.JPanel panelPage)

    	int		nIndex;
    	JPanel	panelPagePrev = null;

    	if ( panelPage == null ) {
    	    panelPagePrev = getLastPage ();
    	} 
    	else if ( vectorPages != null  &&  !vectorPages.isEmpty() ) {
    	    nIndex = vectorPages.indexOf ( panelPage );

	    switch (nIndex) {
	    case MUX:
		if (bypassMFormat) {
		    panelPagePrev = (JPanel) vectorPages.elementAt(PROTOCOL);
		    bypassMFormat = false;
		} else {
		    panelPagePrev = (JPanel) vectorPages.elementAt(MFORMAT);  
		}
		break;

	    case CODEC:
		if ( bypassMFormat && bypassMux ) {
		    bypassMFormat = bypassMux = false;
		    panelPagePrev = (JPanel) vectorPages.elementAt(PROTOCOL);
		} else {
		    if ( bypassMux && !bypassMFormat) {
			bypassMux = false;
			panelPagePrev = (JPanel) vectorPages.elementAt(MFORMAT);
		    } else {
			// if ( bypassMFormat && !bypassMux) {
			// bypassMFormat = false;
			panelPagePrev = (JPanel) vectorPages.elementAt(MUX);
		    }
		}
		break;

	    case GENERAL:
		panelPagePrev = panelPage;
		break;
		
	    case PROTOCOL:
	    case MFORMAT:
	    case RENDERER:
		panelPagePrev = (JPanel) vectorPages.elementAt( nIndex - 1 );
		break;
	    }

		    /*
	    if ((nIndex == vectorPages.size()-1) && bypassRender) {
		panelPagePrev = (JPanel) vectorPages.elementAt(CODEC);
		bypassRender = false;
	    } else if ( bypassMFormat && (panelPage instanceof CodecPane)) {
		panelPagePrev = (JPanel) vectorPages.elementAt(PROTOCOL);
		bypassMFormat = false;
	    } else if ( nIndex > 0  &&  nIndex < vectorPages.size()) {
    	    	panelPagePrev = (JPanel) vectorPages.elementAt( nIndex - 1 );
	    }
	    */
    	}
    	return ( panelPagePrev ); 
    
protected voidinit()

	JPanel panel;
        JPanel panelContent;

	this.getContentPane().setBackground(Color.lightGray);
	this.getContentPane().setLayout(new BorderLayout(6,6));
	this.setResizable(false);
	this.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) { System.exit(0);}
        });

	panelContent = new JPanel ( new BorderLayout(8,8));
	panelContent.setBackground(Color.lightGray);
	this.getContentPane().add("Center", panelContent);
	panelContent.setBorder(BorderFactory.createEmptyBorder(8,8,8,8));

	panelPages = new JPanel(new BorderLayout());
	panelPages.setBorder(BorderFactory.createRaisedBevelBorder());
	// panelPages.setBorder(BorderFactory.createEmptyBorder(6,6,6,6));
	panelContent.add("Center", panelPages);

	panel = createPanelButtons();
	panelContent.add("South", panel);
    
protected booleanisFirstPage(javax.swing.JPanel panelPage)

    	boolean		boolResult;

    	boolResult = (panelPage == getFirstPage());
    	return ( boolResult );
    
protected booleanisLastPage(javax.swing.JPanel panelPage)

    	boolean		boolResult;
	
	// if don't want play, then codec is the last page
	if ( panelPage instanceof CodecPane) {
	  resultFunc = ((GeneralPane)vectorPages.elementAt(GENERAL)).getState();
	  if (!resultFunc[GeneralPane.PLAY]){
              ((RendererPane)vectorPages.elementAt(RENDERER)).disableAll();
	      return true;
	  }
	}

    	boolResult = (panelPage == getLastPage());
    	return ( boolResult );
    
protected booleanonFinish()

	int[] selected;
	String srcJARName, dstJARName;
	boolean twojars = false;

	selected = figureoutSelected();
	srcJARName = ((GeneralPane)vectorPages.elementAt(GENERAL)).getSrcJARName();
	dstJARName = ((GeneralPane)vectorPages.elementAt(GENERAL)).getDstJARName();
	twojars = ((GeneralPane)vectorPages.elementAt(GENERAL)).genTwoJars();

	if ( !twojars ) {
	    File dstFileHandle = new File(dstJARName);
	    if (dstFileHandle.exists() ) {
		int answer =  JOptionPane.showConfirmDialog(this, I18N.getResource("customizer.DlgQuestion"), I18N.getResource("customizer.DlgTitle"), JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE );
		
		if (answer == JOptionPane.NO_OPTION)
		    return false;
	    }
	} else {
	    String pathname, filename;
	    String dst1Name, dst2Name;
	    File dstHandle = new File(dstJARName);
	    pathname = dstHandle.getParent() + File.separator;
	    filename = dstHandle.getName();
	    dst1Name = pathname + "core_" + filename;
	    dst2Name = pathname + "plugin_" + filename;
	    //System.out.println("1 name = " + dst1Name);
	    //System.out.println("2 name = " + dst2Name);

	    File dstHandle1 = new File(dst1Name);
	    File dstHandle2 = new File(dst2Name);

	    if ( dstHandle1.exists() || dstHandle2.exists() ) {
		int answer =  JOptionPane.showConfirmDialog(this, I18N.getResource("customizer.DlgQuestion"), I18N.getResource("customizer.DlgTitle"), JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE );
		
		if (answer == JOptionPane.NO_OPTION)
		    return false;
	    }
	}

	    
	ProgressDiag pd = new ProgressDiag(this, srcJARName, dstJARName, twojars);
	ProcessJAR processjar = new ProcessJAR(srcJARName, dstJARName, selected, pd, theRegistry, release, twojars);
	processjar.start();
	pd.show();

	return true;
    
protected booleanonPageActivate(javax.swing.JPanel panelPage)

	if ( panelPage instanceof ProtocolPane) {
	    ((ProtocolPane)panelPage).setHighlight(resultFunc, release);
	} else if ( panelPage instanceof MFormatPane) {
	    ((MFormatPane)panelPage).setHighlight(resultFunc, resultProtocol, release);
	} else if ( panelPage instanceof CodecPane) {
	    resultFunc = ((GeneralPane)vectorPages.elementAt(GENERAL)).getState();
	    resultMFormat = ((MFormatPane)vectorPages.elementAt(MFORMAT)).getState();
	    resultMux = ((MuxPane)vectorPages.elementAt(MUX)).getState();	    
	    ((CodecPane)panelPage).setHighlight(resultFunc, resultProtocol, resultMFormat, resultMux, release);
	} else if ( panelPage instanceof RendererPane) {
	    ((RendererPane)panelPage).enableAll(release);
	} else if ( panelPage instanceof MuxPane) {
	    ((MuxPane)panelPage).enableAll();
	}

	return true;
    
protected booleanonPageDone(javax.swing.JPanel panelPage)

	if ( panelPage instanceof GeneralPane) {
	    resultFunc = ((GeneralPane)vectorPages.elementAt(GENERAL)).getState();
	    if ( ! ((GeneralPane)panelPage).checking(resultFunc, this)) {
		release =((GeneralPane)panelPage).getRelease(); 
		return false;
	    }
	    release =((GeneralPane)panelPage).getRelease();
	} else if ( panelPage instanceof ProtocolPane) {
	    resultProtocol = ((ProtocolPane)vectorPages.elementAt(PROTOCOL)).getState();
	    resultProtocol[ProtocolPane.RTP] |= resultProtocol[ProtocolPane.RTSP];
	} else if ( panelPage instanceof MFormatPane) {
	    resultMFormat = ((MFormatPane)vectorPages.elementAt(MFORMAT)).getState();
	} else if ( panelPage instanceof CodecPane) {
	    resultCodec= ((CodecPane)vectorPages.elementAt(CODEC)).getState();
	} else if ( panelPage instanceof RendererPane) {
	    resultRndr = ((RendererPane)vectorPages.elementAt(RENDERER)).getState();
	} else if ( panelPage instanceof MuxPane) {
	    resultMux = ((MuxPane)vectorPages.elementAt(MUX)).getState();
	}
	
	return true;
    
private voidsetNextPage()

	JPanel panelPage;
	
	if ( panelCurPage != null && !onPageDone(panelCurPage) )
	    return;

	panelPage = getNextPage(panelCurPage);
	setPage(panelPage);
    
private voidsetPage(javax.swing.JPanel panelPage)

	if (panelPage == null) 
	    return;
	
	oldPage = panelCurPage;

	panelCurPage = panelPage;
	onPageActivate(panelCurPage);

	/*
	panelPages.add(panelCurPage, panelCurPage.getName());
	panelPages.setSelectedComponent(panelCurPage);
	*/
	
	if ( oldPage != null){
	    //System.out.println("do remove page");
	    panelPages.remove(oldPage);
	    // oldPage.removeNotify();
	}

	// System.out.println("panelCurPage = " + panelCurPage);
	panelPages.add("Center", panelCurPage);

	panelPages.validate();
	panelPage.repaint();
	
	if (showHelp) {
	    int index = vectorPages.indexOf(panelCurPage);
	    helpDlg.setHelpPage(index);
	}

	if ( isFirstPage(panelCurPage)) {
	    buttonBack.setEnabled(false);
	    if (getFocusOwner() == buttonBack)
		buttonNext.requestFocus();
	} else {
	    buttonBack.setEnabled(true);
	}

	if ( isLastPage(panelCurPage)) {
	    buttonNext.setEnabled(false);
	    buttonFinish.setEnabled(true);
	    if ( getFocusOwner() == buttonNext )
		buttonFinish.requestFocus();
	} else {
	    buttonNext.setEnabled (true);
	    buttonFinish.setEnabled(false);
	}

	this.validate();
	// panelPages.validate();
	// panelCurPage.validate();
    
private voidsetPrevPage()

	JPanel panelPage;
	
	panelPage = getPrevPage(panelCurPage);
	setPage (panelPage);