[yocto] [PATCH] [eclipse-poky][master]Add more comprehensive error message for invalid project name
Grigoropol, IoanaX
ioanax.grigoropol at intel.com
Thu Mar 14 05:08:05 PDT 2013
Hi Timo,
Thank you for the comments. I have sent a new version of the patch to the list.
Ioana
________________________________________
From: Timo Müller [mail at timomueller.eu]
Sent: Thursday, March 14, 2013 12:29 PM
To: Grigoropol, IoanaX
Cc: yocto at yoctoproject.org
Subject: Re: [yocto] [PATCH] [eclipse-poky][master]Add more comprehensive error message for invalid project name
Hi Ioana,
Ioana Grigoropol wrote, On 14.03.2013 10:06:
> [Yocto #4008]
>
> Signed-off-by: Ioana Grigoropol <ioanax.grigoropol at 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
More information about the yocto
mailing list