Skip to content

Commit

Permalink
Merge pull request #145 from airsdk/develop
Browse files Browse the repository at this point in the history
Correct process of creating a project from an app descriptor with localised name
marchbold authored Jun 23, 2022

Unverified

This commit is not signed, but one or more authors requires that any commit attributed to them is signed.
2 parents 1217b17 + c1beda6 commit fe8a03a
Showing 7 changed files with 138 additions and 34 deletions.
2 changes: 1 addition & 1 deletion client/src/com/apm/client/commands/packages/ListCommand.as
Original file line number Diff line number Diff line change
@@ -104,7 +104,7 @@ package com.apm.client.commands.packages
return;
}

APM.io.writeLine( project.applicationName + "@" + project.version + " " + APM.config.workingDirectory + "" );
APM.io.writeLine( project.applicationFilename + "@" + project.version + " " + APM.config.workingDirectory + "" );
if (project.dependencies.length == 0)
{
APM.io.writeLine( "└── (empty)" );
Original file line number Diff line number Diff line change
@@ -215,10 +215,15 @@ package com.apm.client.commands.project
{
return "src/" + proj.applicationFilename + "-app.xml";
}
else
else if (proj.applicationName is String)
{
return "src/" + proj.applicationName.replace( / /g, "" ) + "-app.xml";
}
else if (proj.applicationName.hasOwnProperty("en"))
{
return "src/" + proj.applicationName["en"].replace( / /g, "" ) + "-app.xml";
}
return "src/MyApplication-app.xml";
}


Original file line number Diff line number Diff line change
@@ -24,7 +24,6 @@ package com.apm.client.commands.project.processes
import com.apm.data.project.ProjectDefinition;

import flash.filesystem.File;
import flash.html.script.Package;


/**
@@ -91,15 +90,31 @@ package com.apm.client.commands.project.processes
// Create project properties from descriptor

default xml namespace = appDescriptor.namespace;
var xmlNs:Namespace = appDescriptor.xmlNamespace;

var project:ProjectDefinition = new ProjectDefinition();

project.applicationId = appDescriptor.xml.id.toString();
project.applicationName = appDescriptor.xml.name.toString();
project.applicationFilename = appDescriptor.xml.filename.toString();
project.version = appDescriptor.xml.versionNumber.toString();
project.versionLabel = appDescriptor.xml.versionLabel.toString();

var nameElements:XMLList = appDescriptor.xml.name..text;
if (nameElements.length() > 0)
{
var names:Object = {};
for each (var nameItem:XML in nameElements)
{
names[nameItem.@xmlNs::lang ] = nameItem.toString();
}
project.applicationName = names;
}
else
{
project.applicationName = appDescriptor.xml.name.toString();
}


var subqueue:ProcessQueue = new ProcessQueue();

var packageList:Vector.<PackageVersion> = new <PackageVersion>[];
68 changes: 55 additions & 13 deletions client/src/com/apm/data/project/ApplicationDescriptor.as
Original file line number Diff line number Diff line change
@@ -76,10 +76,17 @@ package com.apm.data.project


private var _airNS:Namespace;


public function get namespace():Namespace { return _airNS; }


private var _langNS:Namespace;


public function get xmlNamespace():Namespace { return _langNS; }


private var _airSDKVersion:AIRSDKVersion;


@@ -102,9 +109,14 @@ package com.apm.data.project
}


private function isPropertyValueValid( value:String ):Boolean
private function isPropertyValueValid( value:Object ):Boolean
{
return value != null && value.length > 0;
if (value == null) return false;
if (value is String)
{
return String( value ).length > 0;
}
return true;
}


@@ -115,7 +127,25 @@ package com.apm.data.project
default xml namespace = _airNS;

if (isPropertyValueValid( project.applicationId )) _xml.id = project.applicationId;
if (isPropertyValueValid( project.applicationName )) _xml.name = project.applicationName;
if (isPropertyValueValid( project.applicationName ))
{
if (project.applicationName is String)
{
_xml.name = project.applicationName;
}
else
{
var name:XML = <name></name>;
var langs:Array = getSortedKeys( project.applicationName );
for each (var lang:String in langs)
{
var text:XML = <text>{project.applicationName[ lang ]}</text>;
text.@_langNS::lang = lang;
name.appendChild( text );
}
_xml.name = name;
}
}
if (isPropertyValueValid( project.applicationFilename )) _xml.filename = project.applicationFilename;
if (isPropertyValueValid( project.version )) _xml.versionNumber = project.version;
if (isPropertyValueValid( project.versionLabel )) _xml.versionLabel = project.versionLabel;
@@ -124,6 +154,18 @@ package com.apm.data.project
}


private function getSortedKeys( data:Object ):Array
{
var keys:Array = [];
for (var key:String in data)
{
keys.push( key );
}
keys.sort();
return keys;
}


//
// ANDROID
//
@@ -147,14 +189,14 @@ package com.apm.data.project
var manifest:XML = new XML( androidManifest );
var androidns:Namespace = new Namespace( "android", ANDROID_NAMESPACE );

delete manifest.application.@androidns::theme[0];
delete manifest.application.@androidns::name[0];
delete manifest.application.@androidns::label[0];
delete manifest.application.@androidns::windowSoftInputMode[0];
delete manifest.application.@androidns::configChanges[0];
delete manifest.application.@androidns::screenOrientation[0];
delete manifest.application.@androidns::launchMode[0];

delete manifest.application.@androidns::theme[ 0 ];
delete manifest.application.@androidns::name[ 0 ];
delete manifest.application.@androidns::label[ 0 ];
delete manifest.application.@androidns::windowSoftInputMode[ 0 ];
delete manifest.application.@androidns::configChanges[ 0 ];
delete manifest.application.@androidns::screenOrientation[ 0 ];
delete manifest.application.@androidns::launchMode[ 0 ];
var manifestAdditionsContent:String = stripManifestTag( manifest );
var manifestAdditions:XML = new XML(
"<manifestAdditions><![CDATA[" +
@@ -263,9 +305,9 @@ package com.apm.data.project
}
for (var i:int = 0; i < _xml.extensions..extensionID.length(); i++)
{
if (_xml.extensions..extensionID[i].toString() == extensionIDToRemove)
if (_xml.extensions..extensionID[ i ].toString() == extensionIDToRemove)
{
delete _xml.extensions..extensionID[i];
delete _xml.extensions..extensionID[ i ];
return;
}
}
13 changes: 7 additions & 6 deletions client/src/com/apm/data/project/ProjectDefinition.as
Original file line number Diff line number Diff line change
@@ -112,7 +112,7 @@ package com.apm.data.project
for (var buildType:String in _data.buildTypes)
{
var variant:ProjectBuildType = new ProjectBuildType( buildType )
.fromObject( _data.buildTypes[buildType] );
.fromObject( _data.buildTypes[ buildType ] );

_buildTypes.push( variant );
}
@@ -131,9 +131,10 @@ package com.apm.data.project

// Ensures the output JSON format is in a familiar order
var keyOrder:Array = ["identifier", "name", "filename", "version", "versionLabel", "dependencies", "configuration", "buildTypes", "repositories"];
JSONUtils.addMissingKeys( data, keyOrder );
var otherKeys:Array = JSONUtils.getMissingKeys( data, keyOrder );
otherKeys.sort();

return JSON.stringify( data, keyOrder, 4 ) + "\n";
return JSON.stringify( data, keyOrder.concat( otherKeys ), 4 ) + "\n";
}


@@ -196,10 +197,10 @@ package com.apm.data.project
public function set applicationId( value:String ):void { _data[ "identifier" ] = value; }


public function get applicationName():String { return _data[ "name" ]; }
public function get applicationName():Object { return _data[ "name" ]; }


public function set applicationName( value:String ):void { _data[ "name" ] = value; }
public function set applicationName( value:Object ):void { _data[ "name" ] = value; }


public function get applicationFilename():String { return _data[ "filename" ]; }
@@ -236,7 +237,7 @@ package com.apm.data.project
//
// CONFIGURATION PARAMETERS
//

// public function get configuration():Vector.<ProjectParameter> { return _configuration; }

/**
59 changes: 50 additions & 9 deletions client/src/com/apm/utils/JSONUtils.as
Original file line number Diff line number Diff line change
@@ -49,21 +49,62 @@ package com.apm.utils
hasKeyInOrder = true;
break;
}
if (data[key] is Array)
}
if (!hasKeyInOrder) keyOrder.push( key );

if (data[key] is Array)
{
for each (var o:Object in data[key])
{
for each (var o:Object in data[key])
{
addMissingKeys( o, keyOrder );
}
addMissingKeys( o, keyOrder );
}
else if (data[key] is Object)
}
else if (data[key] is Object)
{
addMissingKeys( data[key], keyOrder );
}
}
return keyOrder;
}


public static function getMissingKeys( data:Object, keyOrder:Array, missingKeys:Array=null ):Array
{
if (missingKeys == null) missingKeys = [];
for (var key:String in data)
{
var hasKey:Boolean = false;
for each (var keyInOrder:String in keyOrder)
{
if (keyInOrder == key)
{
addMissingKeys( data[key], keyOrder );
hasKey = true;
break;
}
}
if (!hasKeyInOrder) keyOrder.push( key );
for each (var missingKey:String in missingKeys)
{
if (missingKey == key)
{
hasKey = true;
break;
}
}
if (!hasKey) missingKeys.push( key );

if (data[key] is Array)
{
for each (var o:Object in data[key])
{
getMissingKeys( o, keyOrder, missingKeys );
}
}
else if (data[key] is Object)
{
getMissingKeys( data[key], keyOrder, missingKeys );
}
}
return keyOrder;
return missingKeys;
}

}
4 changes: 2 additions & 2 deletions version.config
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#Tue, 15 Mar 2022 18:24:10 +1000
#Thu, 23 Jun 2022 16:44:14 +1000

version_major=1
version_minor=1
version_build=6
version_build=7
version_preview=

0 comments on commit fe8a03a

Please sign in to comment.