/*******************************************************************************
 * Copyright (c) 2008 SAP AG and others.
 * All rights reserved. This program and the accompanying materials
 * are 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:
 * Stefan Dimov, stefan.dimov@sap.com - initial API and implementation
 *******************************************************************************/
package org.eclipse.jst.j2ee.internal.dialogs;

import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.InputDialog;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jst.j2ee.internal.plugin.J2EEUIMessages;
import org.eclipse.swt.widgets.Shell;

public class ChangeLibDirDialog extends InputDialog {
	private boolean warnBlank;
	
    public ChangeLibDirDialog(Shell parentShell, String initialValue, boolean warnBlank) { 
    	super(parentShell, J2EEUIMessages.getResourceString(J2EEUIMessages.CHANGE_LIB_DIR_HEAD),
    			J2EEUIMessages.getResourceString(J2EEUIMessages.NEW_LIB_DIR_PROPMPT), initialValue, null);
    	this.warnBlank = warnBlank;
    }
    
    protected void buttonPressed(int buttonId) {
        if (buttonId == IDialogConstants.OK_ID) {
        	String res = getText().getText().trim(); 
        	if (res.length() == 0) {
    			if (warnBlank)
    				if (!MessageDialog.openQuestion(this.getShell(), 
    					J2EEUIMessages.getResourceString(J2EEUIMessages.BLANK_LIB_DIR), 
    					J2EEUIMessages.getResourceString(J2EEUIMessages.BLANK_LIB_DIR_CONFIRM))) return;
        	} else {
    			if (res.startsWith("" + IPath.SEPARATOR)); //$NON-NLS-1$
    			res = res.substring(1);	
    			String[] segments = res.split("" + IPath.SEPARATOR); //$NON-NLS-1$
    			Path p = new Path(""); //$NON-NLS-1$
    			boolean valid = true;
    			for (int i = 0; i < segments.length; i++) {
    				valid = p.isValidSegment(segments[i]);
    				if (!valid)
    					break;
    			}
    			if (!valid) {
    				MessageDialog.openError(null, 
    						J2EEUIMessages.getResourceString(J2EEUIMessages.INVALID_PATH), 
    						J2EEUIMessages.getResourceString(J2EEUIMessages.INVALID_PATH_MSG));	
    				return;
    			}	        		
        	}
        } 
        super.buttonPressed(buttonId);
    }    
}

