All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Timo Müller" <mail@timomueller.eu>
To: Ioana Grigoropol <ioanax.grigoropol@intel.com>
Cc: yocto@yoctoproject.org
Subject: Re: [PATCH] [eclipse-poky][master]Add more comprehensive error message for invalid project name
Date: Thu, 14 Mar 2013 11:29:33 +0100	[thread overview]
Message-ID: <5141A68D.5020601@timomueller.eu> (raw)
In-Reply-To: <1363252002-16769-1-git-send-email-ioanax.grigoropol@intel.com>

Hi Ioana,

Ioana Grigoropol wrote, On 14.03.2013 10:06:
> [Yocto #4008]
>
> Signed-off-by: Ioana Grigoropol <ioanax.grigoropol@intel.com>
> ---
>   .../sdk/ide/wizard/NewYoctoCProjectTemplate.java   |   34 +++++++++++++++++---
>   1 file changed, 29 insertions(+), 5 deletions(-)
>
> diff --git a/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/wizard/NewYoctoCProjectTemplate.java b/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/wizard/NewYoctoCProjectTemplate.java
> index 5ffd6b7..8ab5972 100644
> --- a/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/wizard/NewYoctoCProjectTemplate.java
> +++ b/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/wizard/NewYoctoCProjectTemplate.java
> @@ -10,6 +10,8 @@
>    *******************************************************************************/
>   package org.yocto.sdk.ide.wizard;
>
> +import java.util.ArrayList;
> +import java.util.Arrays;
>   import java.util.LinkedHashMap;
>   import java.util.List;
>
> @@ -46,11 +48,11 @@ import org.yocto.sdk.ide.YoctoProfileElement;
>   import org.yocto.sdk.ide.YoctoSDKChecker;
>   import org.yocto.sdk.ide.YoctoSDKChecker.SDKCheckRequestFrom;
>   import org.yocto.sdk.ide.YoctoSDKChecker.SDKCheckResults;
> +import org.yocto.sdk.ide.YoctoSDKPlugin;
> +import org.yocto.sdk.ide.YoctoUIElement;
>   import org.yocto.sdk.ide.natures.YoctoSDKEmptyProjectNature;
>   import org.yocto.sdk.ide.natures.YoctoSDKProjectNature;
>   import org.yocto.sdk.ide.utils.YoctoSDKUtils;
> -import org.yocto.sdk.ide.YoctoSDKPlugin;
> -import org.yocto.sdk.ide.YoctoUIElement;
>
>
>   @SuppressWarnings("restriction")
> @@ -58,11 +60,20 @@ public class NewYoctoCProjectTemplate extends ProcessRunner {
>   	protected boolean savedAutoBuildingValue;
>   	protected ProjectCreatedActions pca;
>   	protected IManagedBuildInfo info;
> +	protected List<Character> illegalChars = Arrays.asList('$', '"','#','%','&','\'','(',')','*', '+', ',','.','/',':',';','<','=','>','?','@','[','\\',']','^','`','{','|','}','~');
>   	
>   	public NewYoctoCProjectTemplate() {
>   		pca = new ProjectCreatedActions();
>   	}
> -	
> +	private String printIllegalChars(){
> +		String print = "";
> +		for (int i = 0; i < illegalChars.size(); i++) {
> +			print += illegalChars.get(i);
> +			if (i != illegalChars.size() - 1)
> +				print += " ,";
> +		}
> +		return print;
> +	}

I think the contained "if" isn't really necessary. You can remove the 
last ", " afterwards. Then you can also use a for each loop to append 
the characters.

private String printIllegalChars(){
	String print = "";

	for (Character character : illegalChars) {
		print += character + ", ";
	}
		
	if (!illegalChars.isEmpty()) {
		print = print.substring(0, print.lastIndexOf(",") - 1);
	}
		
	return print;
}

>   	public void process(TemplateCore template, ProcessArgument[] args, String processId, IProgressMonitor monitor) throws ProcessFailureException {
>
>   		String projectName = args[0].getSimpleValue();
> @@ -74,9 +85,10 @@ public class NewYoctoCProjectTemplate extends ProcessRunner {
>   		boolean isEmptryProject = Boolean.valueOf(isEmptyProjetValue).booleanValue();
>   		IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName);
>   		try {
> -			if (projectName.contains(" ")) {
> +			if (!isValidProjectName(projectName)) {
>   				project.delete(true, null);
> -				throw new ProcessFailureException(projectName + " contains space(s).  Project name can't contain space(s)");
> +				throw new ProcessFailureException("Project name " + "\""+ projectName +"\"" +" is invalid! " +
> +						"\nNone of these characters are accepted inside project names: whitespaces, " + printIllegalChars());

Would be nice if we can wrap this up with the YoctoSDKMessages to be 
able to internationalize the string later.

>   			}
>   			if (!project.exists()) {
>   				IWorkspace workspace = ResourcesPlugin.getWorkspace();
> @@ -166,6 +178,18 @@ public class NewYoctoCProjectTemplate extends ProcessRunner {
>   			throw new OperationCanceledException(Messages.getString("NewManagedProject.3") + e.getMessage());
>   		}
>   	}
> +	private boolean isValidProjectName(String projectName) {
> +		if (projectName.contains("\\s+"))
> +			return false;
> +
> +		char[] chars = projectName.toCharArray();
> +		if (!Character.isJavaIdentifierStart(chars[0]))
> +			return false;
> +		for (int i = 1; i < chars.length; i++)
> +			if (illegalChars.contains(chars[i]))
> +				return false;
> +		return true;
> +}

I think it would be better to use functionality from java.util.regex to 
do the name checking. The Pattern could be compiled once as a static 
member and we could than use the matcher to check whether the project 
name is fine.

Something like this:

private static Pattern pattern = Pattern.compile(".*(\\$|\").*");

private boolean isValidProjectName(String projectName) {
   Matcher matcher = pattern.matcher(projectName);
	
   if (matcher.matches()) {
     return false;
   }

   return true;
}

>
>   	protected final void turnOffAutoBuild(IWorkspace workspace) throws CoreException {
>   		IWorkspaceDescription workspaceDesc = workspace.getDescription();
>

Best regards,
Timo



  reply	other threads:[~2013-03-14 10:29 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-03-14  9:06 [PATCH] [eclipse-poky][master]Add more comprehensive error message for invalid project name Ioana Grigoropol
2013-03-14 10:29 ` Timo Müller [this message]
2013-03-14 10:36   ` Timo Müller
2013-03-14 12:08   ` Grigoropol, IoanaX

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5141A68D.5020601@timomueller.eu \
    --to=mail@timomueller.eu \
    --cc=ioanax.grigoropol@intel.com \
    --cc=yocto@yoctoproject.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.