[yocto] [PATCH] [eclipse-poky][master]Add more comprehensive error message for invalid project name

Timo Müller mail at timomueller.eu
Thu Mar 14 03:36:28 PDT 2013


Hi Ioana,

Timo Müller wrote, On 14.03.2013 11:29:
> 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


I forgot to mention. I found a way to create projects with invalid names.

# Create a new Yocto C Project
# Enter a wrong name eg. Test"
# Press next
# Press finish
# --> Error Message is shown, press ok
# Press back
# Change the name to an also invalid name eg. Test$
# Click finish

Best regards,
Timo




More information about the yocto mailing list