mirror of
https://github.com/danieleteti/delphimvcframework.git
synced 2024-11-15 15:55:54 +01:00
Merge branch 'master' of https://github.com/danieleteti/delphimvcframework
This commit is contained in:
commit
8715a6f21c
@ -2,7 +2,10 @@
|
||||
|
||||
dmvcframework-core-team uses always the latest version of Delphi, so testing in previous versions is a problem and some users could have problems with the new DMVCFramework versions. We usually publish a number of RCs but not all the users test them, so when the main version is released some "late adopters" could find anomalies on old Delphi versions.
|
||||
In the list below there are all the *Compatibility Mantainers* for each specific Delphi versions supported.
|
||||
The *Compatibility Mantainers* run unit tests for each RC and each finally releases and raise [issues](https://github.com/danieleteti/delphimvcframework/issues) if problems arises during these tests.
|
||||
The *Compatibility Mantainers* run unit tests for each RC and each finally releases and raise [issues](https://github.com/danieleteti/delphimvcframework/issues) if problems arises during these tests.
|
||||
|
||||
>The issues should be created on github project using the label `COMPATIBILITY MANTAINER`.
|
||||
|
||||
If you use a Delphi version that is not the latest, and you find an issue, check here the *Compatibility Mantainers* for your version and create an issue with reference to him (you can also talk about the issue mentioning the mantainer using the facebook group).
|
||||
|
||||
## COMPATIBILITY MANTAINERS
|
||||
@ -10,14 +13,15 @@ If you use a Delphi version that is not the latest, and you find an issue, check
|
||||
|Delphi Version | Compatibility Mantainer |
|
||||
|---|---|
|
||||
|Delphi 10.3.1 Rio |Daniele Teti, João Fernandes, Emilio Perez |
|
||||
|Delphi 10.2.3 Tokyo|Mohammed Nasman, Akrom Obidov, MJ Wille |
|
||||
|Delphi 10.2.3 Tokyo |Daniele Barbato, Mohammed Nasman, MJ Wille |
|
||||
|Delphi 10.2 Community Edition|Akrom Obidov|
|
||||
|Delphi 10.1.2 Berlin | Emilio Perez, Akrom Obidov, Akbar Khayitov |
|
||||
|Delphi 10.0 Seattle | Davut Eryılmaz |
|
||||
|Delphi XE7 | Daniele Barbato, Emilio Perez |
|
||||
|
||||
### What is expected by a compatibility mantainer?
|
||||
|
||||
A compatibility maintainer is in charge to test each release randidate and each main version to ensure that the core packages and all the samples works for the Delphi version in charge to him. These are the steps to follow:
|
||||
A compatibility maintainer is in charge to test each release candidate and each main version to ensure that the core packages and all the samples works for the Delphi version in charge to him. These are the steps to follow:
|
||||
|
||||
### Testing Installation
|
||||
|
||||
@ -29,7 +33,7 @@ A compatibility maintainer is in charge to test each release randidate and each
|
||||
### Testing IDE Integration
|
||||
|
||||
- Close Delphi
|
||||
- Restart Delphi and check if the DMVCFramedork splash appears in the RAD Studio splash screen.
|
||||
- Restart Delphi and check if the DMVCFramework splash appears in the RAD Studio splash screen.
|
||||
- `File->New->Project` you should see the DMVCFramework Node to create a new project
|
||||
- Create a new project, leave all the defaults and run it (should run without problems)
|
||||
|
||||
|
41
README.md
41
README.md
@ -62,10 +62,39 @@ Congratulations to Daniele Teti and all the staff for the excellent work!" -- Ma
|
||||
* Simple and [documented](docs/ITDevCON%202013%20-%20Introduction%20to%20DelphiMVCFramework.pdf)
|
||||
* Continuosly tested for Delphi versions incompatibilities by the proud [compatibility mantainers](COMPATIBILITY_MANTAINERS.MD)
|
||||
|
||||
## What's New
|
||||
## What's Cooking in the Lab
|
||||
|
||||
### DelphiMVCFramework 3.1.1-beryllium (currently in `RC` phase)
|
||||
- New! Added SQLGenerator and RQL compiler for PostgreSQL (in addition to MySQL, MariaDB, Firebird and Interbase)
|
||||
- New! Added SQLGenerator and RQL compiler for PostgreSQL and MSSQLServer (in addition to MySQL, MariaDB, Firebird and Interbase)
|
||||
- Improved! Greatly improved support for [HATEOAS](https://en.wikipedia.org/wiki/HATEOAS) in renders. Check `TRenderSampleController.GetPeople_AsObjectList_HATEOS` and all the others actions end with `HATEOS` in `renders.dproj` sample)
|
||||
|
||||
```delphi
|
||||
//Now is really easy to add "_links" property automatically for each collection element while rendering
|
||||
Render<TPerson>(People, True,
|
||||
procedure(const Person: TPerson; const Links: TMVCStringDictionary)
|
||||
begin
|
||||
Links['x-ref'] := '/api/people/' + Person.ID;
|
||||
Links['x-child-ref'] := '/api/people/' + Person.ID + '/child';
|
||||
end);
|
||||
|
||||
//Datasets have a similar anon method to do the same thing
|
||||
Render(lDM.qryCustomers, False,
|
||||
procedure(const DS: TDataset; const Links: TMVCStringDictionary)
|
||||
begin
|
||||
Links['x-ref'] := '/api/customers/' + DS.FieldByName('cust_no').AsString;
|
||||
Links['x-ref-orders'] := '/api/customers/' + DS.FieldByName('cust_no').AsString + '/orders';
|
||||
end);
|
||||
|
||||
//Single object rendering allows HATEOAS too!
|
||||
Render(lPerson, False,
|
||||
procedure(const AObject: TObject; const Links: TMVCStringDictionary)
|
||||
begin
|
||||
Links['x-self'] := '/people/' + TPerson(AObject).ID.ToString;
|
||||
Links['x-self-list'] := '/people';
|
||||
end);
|
||||
|
||||
```
|
||||
|
||||
- Better packages organization (check `packages` folder)
|
||||
- New! `TMVCActiveRecord.Count` method (e.g. `TMVCActiveRecord.Count(TCustomer)` returns the number of records for the entity mapped by the class `TCustomer`)
|
||||
- Change! `TMVCACtiveRecord.GetByPK<T>` raises an exception if the record is not found
|
||||
@ -78,7 +107,7 @@ Congratulations to Daniele Teti and all the staff for the excellent work!" -- Ma
|
||||
- Improved! In case of unhandled exception `TMVCEngine` is compliant with the default response content-type (usually it did would reply using `text/plain`).
|
||||
- Fix! [issue184](https://github.com/danieleteti/delphimvcframework/issues/184).
|
||||
- Breaking Change! In `MVCActiveRecord` attribute `MVCPrimaryKey` has been removed and merged with `MVCTableField`, so now `TMVCActiveRecordFieldOption` is a set of `foPrimaryKey`, `foAutoGenerated`, `foTransient` (check `activerecord_showcase.dproj` sample).
|
||||
- Added! New overloads for all the Log\* calls. Now it is possibile to call `LogD(lMyObject)` to get logged `lMyObject` as JSON.
|
||||
- Added! New overloads for all the Log\* calls. Now it is possibile to call `LogD(lMyObject)` to get logged `lMyObject` as JSON (custom type serializers not supported in log).
|
||||
- Fixed! [issue164](https://github.com/danieleteti/delphimvcframework/issues/164)
|
||||
- Fixed! [issue182](https://github.com/danieleteti/delphimvcframework/issues/182)
|
||||
- New Installation procedure! Just open the project group, build all and install the design-time package (which is `dmvcframeworkDT`)
|
||||
@ -89,9 +118,9 @@ Congratulations to Daniele Teti and all the staff for the excellent work!" -- Ma
|
||||
|Delphi 10.3 Rio| `packages\d103\dmvcframework_group.groupproj`|
|
||||
|Delphi 10.2 Tokyo| `packages\d102\dmvcframework_group.groupproj`|
|
||||
|Delphi 10.1 Berlin| `packages\d101\dmvcframework_group.groupproj`|
|
||||
|
||||
For older Delphi versions still there aren't complete packages available, but DMVCFramework is usable from XE7 without any issues. If you use a version previous of `Delphi 10.1 Berlin` and you want to contribute, please provide your group project using the distributed packages as example.
|
||||
|
||||
|Delphi 10.0 Seattle| `packages\d100\dmvcframework_group.groupproj`|
|
||||
|Delphi XE8| `packages\dxe8\dmvcframework_group.groupproj`|
|
||||
|Delphi XE7| `packages\dxe7\dmvcframework_group.groupproj`|
|
||||
|
||||
### DelphiMVCFramework 3.1.0-lithium
|
||||
- New! Added `TMVCActiveRecord` framework (check sample `activerecord_showcase` and `activerecord_crud`)
|
||||
|
@ -2,53 +2,58 @@ unit LoggerPro.NSQAppender;
|
||||
|
||||
interface
|
||||
|
||||
uses Classes, SysUtils, LoggerPro, System.Net.HttpClient;
|
||||
uses
|
||||
Classes,
|
||||
SysUtils,
|
||||
LoggerPro,
|
||||
System.Net.HttpClient;
|
||||
|
||||
type
|
||||
|
||||
{
|
||||
Author: Stéphane "Fulgan" GROBETY (https://github.com/Fulgan/)
|
||||
Log appender for NSQ (https://nsq.io) (https://github.com/nsqio/nsq)
|
||||
"NSQ is a realtime message processing system designed to operate at bitly's
|
||||
scale, handling billions of messages per day. It promotes distributed and
|
||||
decentralized topologies without single points of failure, enabling fault
|
||||
tolerance and high availability coupled with a reliable message delivery
|
||||
guarantee"
|
||||
{
|
||||
Author: Stéphane "Fulgan" GROBETY (https://github.com/Fulgan/)
|
||||
Log appender for NSQ (https://nsq.io) (https://github.com/nsqio/nsq)
|
||||
"NSQ is a realtime message processing system designed to operate at bitly's
|
||||
scale, handling billions of messages per day. It promotes distributed and
|
||||
decentralized topologies without single points of failure, enabling fault
|
||||
tolerance and high availability coupled with a reliable message delivery
|
||||
guarantee"
|
||||
|
||||
For testing, you can navigate to the NSQ folder and type the following commands:
|
||||
For testing, you can navigate to the NSQ folder and type the following commands:
|
||||
|
||||
This starts the NSQLookup service then starts a listener on the default
|
||||
endpoint(http:/127.0.0.1:4151)
|
||||
This starts the NSQLookup service then starts a listener on the default
|
||||
endpoint(http:/127.0.0.1:4151)
|
||||
|
||||
start nsqlookupd
|
||||
start nsqd --lookupd-tcp-address=127.0.0.1:4160
|
||||
start nsqlookupd
|
||||
start nsqd --lookupd-tcp-address=127.0.0.1:4160
|
||||
|
||||
|
||||
This starts a consumer for the topic "test" that outputs the messages to the console:
|
||||
This starts a consumer for the topic "test" that outputs the messages to the console:
|
||||
|
||||
start nsq_tail --topic=test --lookupd-http-address=127.0.0.1:4161
|
||||
start nsq_tail --topic=test --lookupd-http-address=127.0.0.1:4161
|
||||
|
||||
(optional) This starts a consumer for the ephemeral topic "test" that outputs the messages to the console:
|
||||
(optional) This starts a consumer for the ephemeral topic "test" that outputs the messages to the console:
|
||||
|
||||
start nsq_tail --topic=test#ephemeral --lookupd-http-address=127.0.0.1:4161
|
||||
start nsq_tail --topic=test#ephemeral --lookupd-http-address=127.0.0.1:4161
|
||||
|
||||
(optional) This starts a NSQAdmin web interface that can be reached on http://localhost:4171/
|
||||
(optional) This starts a NSQAdmin web interface that can be reached on http://localhost:4171/
|
||||
|
||||
start nsqadmin --lookupd-http-address=127.0.0.1:4161
|
||||
start nsqadmin --lookupd-http-address=127.0.0.1:4161
|
||||
|
||||
Note about consumers:
|
||||
- If there is no consumer to received messages for a channel, NSQ will
|
||||
Note about consumers:
|
||||
- If there is no consumer to received messages for a channel, NSQ will
|
||||
save them to memory and disk unless the topic has been marked as Ephemeral.
|
||||
Use NSQAdmin to delete any extra channel created.
|
||||
- Ephemeral topics are not saved or cached and the topic will be deleted
|
||||
- Ephemeral topics are not saved or cached and the topic will be deleted
|
||||
once the last consumer disconnects
|
||||
- Writing a consumer is more complex than writing a client. A list of available
|
||||
- Writing a consumer is more complex than writing a client. A list of available
|
||||
client libraries can be found at https://nsq.io/clients/client_libraries.html
|
||||
}
|
||||
}
|
||||
|
||||
TOnCreateData = procedure(const sender: TObject; const LogItem: TLogItem; var Data: TStream);
|
||||
TOnNetSendError = procedure(const sender: TObject; const LogItem: TLogItem;
|
||||
const NetError: ENetHTTPClientException; var RetryCount: Integer);
|
||||
|
||||
TOnCreateData = procedure(const sender : TObject; const LogItem: TLogItem; var Data: TStream);
|
||||
TOnNetSendError = procedure(const sender : TObject; const LogItem: TLogItem; const NetError: ENetHTTPClientException; var RetryCount: Integer);
|
||||
TLoggerProNSQAppenderBase = class(TLoggerProAppenderBase, ILogAppender)
|
||||
private
|
||||
FOnCreateData: TOnCreateData;
|
||||
@ -56,7 +61,7 @@ type
|
||||
procedure SetOnCreateData(const Value: TOnCreateData);
|
||||
procedure SetOnNetSendError(const Value: TOnNetSendError);
|
||||
protected
|
||||
FNSQUrl : string;
|
||||
FNSQUrl: string;
|
||||
FTopic: String;
|
||||
FUserName, FMachineName: string;
|
||||
FEphemeral: Boolean;
|
||||
@ -64,8 +69,11 @@ type
|
||||
FLogFormat: string;
|
||||
FFormatSettings: TFormatSettings;
|
||||
public
|
||||
const DEFAULT_LOG_FORMAT = '%0:s [TID %1:-8d][%2:-8s] %3:s [%4:s]';
|
||||
const DEFAULT_NSQ_URL = 'http://127.0.0.1:4151';
|
||||
const
|
||||
DEFAULT_LOG_FORMAT = '%0:s [TID %1:-8d][%2:-8s] %3:s [%4:s]';
|
||||
|
||||
const
|
||||
DEFAULT_NSQ_URL = 'http://127.0.0.1:4151';
|
||||
|
||||
function GetNSQUrl: string;
|
||||
procedure SetNSQUrl(const Value: string);
|
||||
@ -83,10 +91,10 @@ type
|
||||
/// 0.1:4151)</param>
|
||||
/// <param name="aLogFormat"> (string) Log format to use if no custom log message
|
||||
/// creation event is defined </param>
|
||||
constructor Create(aTopic: string=''; aEphemeral: Boolean = False;
|
||||
aNSQUrl: string=DEFAULT_NSQ_URL;
|
||||
aLogFormat: string=DEFAULT_LOG_FORMAT);
|
||||
reintroduce;
|
||||
constructor Create(aTopic: string = ''; aEphemeral: Boolean = False;
|
||||
aNSQUrl: string = DEFAULT_NSQ_URL;
|
||||
aLogFormat: string = DEFAULT_LOG_FORMAT);
|
||||
reintroduce;
|
||||
property NSQUrl: string read GetNSQUrl write SetNSQUrl;
|
||||
property Ephemeral: Boolean read FEphemeral write SetEphemeral;
|
||||
property OnCreateData: TOnCreateData read FOnCreateData write SetOnCreateData;
|
||||
@ -101,11 +109,12 @@ type
|
||||
|
||||
implementation
|
||||
|
||||
uses System.NetEncoding;
|
||||
uses
|
||||
System.NetEncoding;
|
||||
|
||||
constructor TLoggerProNSQAppenderBase.Create(aTopic: string=''; aEphemeral:
|
||||
Boolean = False; aNSQUrl: string=DEFAULT_NSQ_URL; aLogFormat:
|
||||
string=DEFAULT_LOG_FORMAT);
|
||||
constructor TLoggerProNSQAppenderBase.Create(aTopic: string = ''; aEphemeral:
|
||||
Boolean = False; aNSQUrl: string = DEFAULT_NSQ_URL; aLogFormat:
|
||||
string = DEFAULT_LOG_FORMAT);
|
||||
begin
|
||||
inherited Create();
|
||||
FEphemeral := aEphemeral;
|
||||
@ -122,7 +131,7 @@ begin
|
||||
try
|
||||
if assigned(FOnCreateData) then
|
||||
begin
|
||||
FOnCreateData(Self, SrcLogItem, Result);
|
||||
FOnCreateData(Self, SrcLogItem, result);
|
||||
end
|
||||
else
|
||||
begin
|
||||
@ -131,7 +140,7 @@ begin
|
||||
except
|
||||
on e: Exception do
|
||||
begin
|
||||
FreeAndNil(Result);
|
||||
FreeAndNil(result);
|
||||
raise;
|
||||
end;
|
||||
end;
|
||||
@ -140,8 +149,9 @@ end;
|
||||
function TLoggerProNSQAppenderBase.FormatLog(
|
||||
const aLogItem: TLogItem): string;
|
||||
begin
|
||||
result := Format(FLogFormat, [datetimetostr(aLogItem.TimeStamp, FFormatSettings), aLogItem.ThreadID,
|
||||
aLogItem.LogTypeAsString, aLogItem.LogMessage, aLogItem.LogTag])
|
||||
result := Format(FLogFormat, [datetimetostr(aLogItem.TimeStamp, FFormatSettings),
|
||||
aLogItem.ThreadID,
|
||||
aLogItem.LogTypeAsString, aLogItem.LogMessage, aLogItem.LogTag])
|
||||
end;
|
||||
|
||||
function TLoggerProNSQAppenderBase.GetNSQUrl: string;
|
||||
@ -161,7 +171,7 @@ end;
|
||||
|
||||
procedure TLoggerProNSQAppenderBase.SetNSQUrl(const Value: string);
|
||||
begin
|
||||
FNSQUrl := value;
|
||||
FNSQUrl := Value;
|
||||
end;
|
||||
|
||||
procedure TLoggerProNSQAppenderBase.SetOnCreateData(const Value: TOnCreateData);
|
||||
@ -177,7 +187,7 @@ end;
|
||||
|
||||
procedure TLoggerProNSQAppenderBase.SetTopic(const Value: string);
|
||||
begin
|
||||
FTopic := value;
|
||||
FTopic := Value;
|
||||
end;
|
||||
|
||||
procedure TLoggerProNSQAppenderBase.Setup;
|
||||
@ -203,20 +213,22 @@ begin
|
||||
FHTTPCli := THTTPClient.Create;
|
||||
try
|
||||
if Topic.trim.IsEmpty then
|
||||
TopicName := aLogItem.LogTag.Trim
|
||||
TopicName := aLogItem.LogTag.trim
|
||||
else
|
||||
TopicName := Topic.Trim;
|
||||
URI :=NSQUrl + '/pub?topic=' + TNetEncoding.URL.Encode(TopicName);
|
||||
TopicName := Topic.trim;
|
||||
URI := NSQUrl + '/pub?topic=' + TNetEncoding.URL.Encode(TopicName);
|
||||
if Ephemeral then
|
||||
URI := URI + '#ephemeral';
|
||||
Data := CreateData(aLogItem);
|
||||
if Assigned(Data) then
|
||||
if assigned(Data) then
|
||||
begin
|
||||
repeat
|
||||
try
|
||||
// Set very short timeouts: this is a local call and we don't want to block the queue for too long.
|
||||
{$IF CompilerVersion >= 31}
|
||||
FHTTPCli.ConnectionTimeout := 100;
|
||||
FHTTPCli.ResponseTimeout := 200;
|
||||
{$ENDIF}
|
||||
Data.Seek(0, soFromBeginning);
|
||||
// ignore the respnse: as long as NSQD has accepted the POST, it will handle the result
|
||||
FHTTPCli.Post(URI, Data);
|
||||
@ -225,14 +237,14 @@ begin
|
||||
on e: ENetHTTPClientException do
|
||||
begin
|
||||
// if there is an event handler for net exception, call it
|
||||
if Assigned(FOnNetSendError) then
|
||||
OnNetSendError(self, aLogItem, e, FRetryCount);
|
||||
if assigned(FOnNetSendError) then
|
||||
OnNetSendError(Self, aLogItem, e, FRetryCount);
|
||||
// if the handler has set FRetryCount to a positive value then retry the call
|
||||
if FRetryCount <= 0 then
|
||||
break;
|
||||
end;
|
||||
end;
|
||||
until false;
|
||||
until False;
|
||||
end;
|
||||
finally
|
||||
FreeAndNil(FHTTPCli);
|
||||
|
@ -16,9 +16,11 @@ type
|
||||
Some ideas from NSQ appender from Stéphane "Fulgan" GROBETY (https://github.com/Fulgan/)
|
||||
}
|
||||
|
||||
TOnCreateData = reference to procedure(const Sender: TObject; const LogItem: TLogItem; const ExtendedInfo: TLoggerProExtendedInfo;
|
||||
TOnCreateData = reference to procedure(const Sender: TObject; const LogItem: TLogItem;
|
||||
const ExtendedInfo: TLoggerProExtendedInfo;
|
||||
var Data: TStream);
|
||||
TOnNetSendError = reference to procedure(const Sender: TObject; const LogItem: TLogItem; const NetError: Exception;
|
||||
TOnNetSendError = reference to procedure(const Sender: TObject; const LogItem: TLogItem;
|
||||
const NetError: Exception;
|
||||
var RetryCount: Integer);
|
||||
|
||||
TLoggerProRESTAppender = class(TLoggerProAppenderBase, ILogAppender)
|
||||
@ -38,16 +40,19 @@ type
|
||||
function GetExtendedInfo: string;
|
||||
protected const
|
||||
DEFAULT_LOG_FORMAT = '%0:s [TID %1:10u][%2:-8s] %3:s {EI%4:s}[%5:s]';
|
||||
DEFAULT_EXTENDED_INFO = [TLogExtendedInfo.EIUserName, TLogExtendedInfo.EIComputerName, TLogExtendedInfo.EIProcessName,
|
||||
DEFAULT_EXTENDED_INFO = [TLogExtendedInfo.EIUserName, TLogExtendedInfo.EIComputerName,
|
||||
TLogExtendedInfo.EIProcessName,
|
||||
TLogExtendedInfo.EIProcessID, TLogExtendedInfo.EIDeviceID];
|
||||
DEFAULT_REST_URL = 'http://127.0.0.1:8080/api/logs';
|
||||
procedure InternalWriteLog(const aURI: string; const aLogItem: TLogItem; const aStream: TStream);
|
||||
procedure InternalWriteLog(const aURI: string; const aLogItem: TLogItem;
|
||||
const aStream: TStream);
|
||||
public
|
||||
function GetRESTUrl: string;
|
||||
procedure SetRESTUrl(const Value: string);
|
||||
procedure WriteLog(const aLogItem: TLogItem); override;
|
||||
constructor Create(aRESTUrl: string = DEFAULT_REST_URL; aContentType: string = 'text/plain';
|
||||
aLogExtendedInfo: TLoggerProExtendedInfo = DEFAULT_EXTENDED_INFO; aLogFormat: string = DEFAULT_LOG_FORMAT); reintroduce;
|
||||
aLogExtendedInfo: TLoggerProExtendedInfo = DEFAULT_EXTENDED_INFO;
|
||||
aLogFormat: string = DEFAULT_LOG_FORMAT); reintroduce;
|
||||
property RESTUrl: string read GetRESTUrl write SetRESTUrl;
|
||||
property OnCreateData: TOnCreateData read FOnCreateData write SetOnCreateData;
|
||||
property OnNetSendError: TOnNetSendError read FOnNetSendError write SetOnNetSendError;
|
||||
@ -103,8 +108,10 @@ end;
|
||||
{$ENDIF}
|
||||
|
||||
|
||||
constructor TLoggerProRESTAppender.Create(aRESTUrl: string = DEFAULT_REST_URL; aContentType: string = 'text/plain';
|
||||
aLogExtendedInfo: TLoggerProExtendedInfo = DEFAULT_EXTENDED_INFO; aLogFormat: string = DEFAULT_LOG_FORMAT);
|
||||
constructor TLoggerProRESTAppender.Create(aRESTUrl: string = DEFAULT_REST_URL;
|
||||
aContentType: string = 'text/plain';
|
||||
aLogExtendedInfo: TLoggerProExtendedInfo = DEFAULT_EXTENDED_INFO;
|
||||
aLogFormat: string = DEFAULT_LOG_FORMAT);
|
||||
begin
|
||||
inherited Create;
|
||||
fRESTUrl := aRESTUrl;
|
||||
@ -140,7 +147,8 @@ end;
|
||||
|
||||
function TLoggerProRESTAppender.FormatLog(const aLogItem: TLogItem): string;
|
||||
begin
|
||||
Result := Format(fLogFormat, [datetimetostr(aLogItem.TimeStamp, fFormatSettings), aLogItem.ThreadID, aLogItem.LogTypeAsString,
|
||||
Result := Format(fLogFormat, [datetimetostr(aLogItem.TimeStamp, fFormatSettings),
|
||||
aLogItem.ThreadID, aLogItem.LogTypeAsString,
|
||||
aLogItem.LogMessage, GetExtendedInfo, aLogItem.LogTag]);
|
||||
end;
|
||||
|
||||
@ -197,7 +205,8 @@ begin
|
||||
end;
|
||||
if TLogExtendedInfo.EIProcessName in fExtendedInfo then
|
||||
begin
|
||||
fExtendedInfoData[TLogExtendedInfo.EIProcessName] := TPath.GetFileName(GetModuleName(HInstance));
|
||||
fExtendedInfoData[TLogExtendedInfo.EIProcessName] :=
|
||||
TPath.GetFileName(GetModuleName(HInstance));
|
||||
end;
|
||||
if TLogExtendedInfo.EIProcessID in fExtendedInfo then
|
||||
begin
|
||||
@ -238,7 +247,8 @@ begin
|
||||
inherited;
|
||||
end;
|
||||
|
||||
procedure TLoggerProRESTAppender.InternalWriteLog(const aURI: string; const aLogItem: TLogItem; const aStream: TStream);
|
||||
procedure TLoggerProRESTAppender.InternalWriteLog(const aURI: string; const aLogItem: TLogItem;
|
||||
const aStream: TStream);
|
||||
var
|
||||
lHTTPCli: THTTPClient;
|
||||
lRetryCount: Integer;
|
||||
@ -252,10 +262,13 @@ begin
|
||||
repeat
|
||||
try
|
||||
// Set very short timeouts: this is a local call and we don't want to block the queue for too long.
|
||||
{$IF CompilerVersion >= 31}
|
||||
lHTTPCli.ConnectionTimeout := 100;
|
||||
lHTTPCli.ResponseTimeout := 200;
|
||||
{$ENDIF}
|
||||
aStream.Seek(0, soFromBeginning);
|
||||
lResp := lHTTPCli.Post(aURI, aStream, nil, [TNetHeader.Create('content-type', fContentType)]);
|
||||
lResp := lHTTPCli.Post(aURI, aStream, nil,
|
||||
[TNetHeader.Create('content-type', fContentType)]);
|
||||
if not(lResp.StatusCode in [200, 201]) then
|
||||
begin
|
||||
raise ELoggerPro.Create(lResp.ContentAsString);
|
||||
@ -293,7 +306,8 @@ var
|
||||
lURI: string;
|
||||
lData: TStream;
|
||||
begin
|
||||
lURI := RESTUrl + '/' + TNetEncoding.URL.Encode(aLogItem.LogTag.Trim) + '/' + TNetEncoding.URL.Encode(aLogItem.LogTypeAsString);
|
||||
lURI := RESTUrl + '/' + TNetEncoding.URL.Encode(aLogItem.LogTag.Trim) + '/' +
|
||||
TNetEncoding.URL.Encode(aLogItem.LogTypeAsString);
|
||||
lData := CreateData(aLogItem);
|
||||
try
|
||||
if Assigned(lData) then
|
||||
|
50
lib/loggerpro/packages/dxe7/loggerproRT.dpk
Normal file
50
lib/loggerpro/packages/dxe7/loggerproRT.dpk
Normal file
@ -0,0 +1,50 @@
|
||||
package loggerproRT;
|
||||
|
||||
{$R *.res}
|
||||
{$IFDEF IMPLICITBUILDING This IFDEF should not be used by users}
|
||||
{$ALIGN 8}
|
||||
{$ASSERTIONS ON}
|
||||
{$BOOLEVAL OFF}
|
||||
{$DEBUGINFO OFF}
|
||||
{$EXTENDEDSYNTAX ON}
|
||||
{$IMPORTEDDATA ON}
|
||||
{$IOCHECKS ON}
|
||||
{$LOCALSYMBOLS ON}
|
||||
{$LONGSTRINGS ON}
|
||||
{$OPENSTRINGS ON}
|
||||
{$OPTIMIZATION OFF}
|
||||
{$OVERFLOWCHECKS OFF}
|
||||
{$RANGECHECKS OFF}
|
||||
{$REFERENCEINFO ON}
|
||||
{$SAFEDIVIDE OFF}
|
||||
{$STACKFRAMES ON}
|
||||
{$TYPEDADDRESS OFF}
|
||||
{$VARSTRINGCHECKS ON}
|
||||
{$WRITEABLECONST OFF}
|
||||
{$MINENUMSIZE 1}
|
||||
{$IMAGEBASE $400000}
|
||||
{$DEFINE DEBUG}
|
||||
{$ENDIF IMPLICITBUILDING}
|
||||
{$DESCRIPTION 'LoggerPro'}
|
||||
{$LIBSUFFIX 'xe7'}
|
||||
{$RUNONLY}
|
||||
{$IMPLICITBUILD ON}
|
||||
|
||||
requires
|
||||
rtl,
|
||||
IndySystem,
|
||||
IndyProtocols,
|
||||
IndyCore;
|
||||
|
||||
contains
|
||||
LoggerPro.EMailAppender in '..\..\LoggerPro.EMailAppender.pas',
|
||||
LoggerPro.FileAppender in '..\..\LoggerPro.FileAppender.pas',
|
||||
LoggerPro.GlobalLogger in '..\..\LoggerPro.GlobalLogger.pas',
|
||||
LoggerPro.MemoryAppender in '..\..\LoggerPro.MemoryAppender.pas',
|
||||
LoggerPro in '..\..\LoggerPro.pas',
|
||||
LoggerPro.Proxy in '..\..\LoggerPro.Proxy.pas',
|
||||
LoggerPro.UDPSyslogAppender in '..\..\LoggerPro.UDPSyslogAppender.pas',
|
||||
LoggerPro.Utils in '..\..\LoggerPro.Utils.pas',
|
||||
ThreadSafeQueueU in '..\..\ThreadSafeQueueU.pas';
|
||||
|
||||
end.
|
575
lib/loggerpro/packages/dxe7/loggerproRT.dproj
Normal file
575
lib/loggerpro/packages/dxe7/loggerproRT.dproj
Normal file
@ -0,0 +1,575 @@
|
||||
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<ProjectGuid>{1611FBE6-5266-48FE-BDF5-E46EEAA922BE}</ProjectGuid>
|
||||
<MainSource>loggerproRT.dpk</MainSource>
|
||||
<ProjectVersion>18.6</ProjectVersion>
|
||||
<FrameworkType>None</FrameworkType>
|
||||
<Base>True</Base>
|
||||
<Config Condition="'$(Config)'==''">Debug</Config>
|
||||
<Platform Condition="'$(Platform)'==''">Win32</Platform>
|
||||
<TargetedPlatforms>1</TargetedPlatforms>
|
||||
<AppType>Package</AppType>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''">
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="('$(Platform)'=='Android' and '$(Base)'=='true') or '$(Base_Android)'!=''">
|
||||
<Base_Android>true</Base_Android>
|
||||
<CfgParent>Base</CfgParent>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Base)'=='true') or '$(Base_Win32)'!=''">
|
||||
<Base_Win32>true</Base_Win32>
|
||||
<CfgParent>Base</CfgParent>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Config)'=='Debug' or '$(Cfg_1)'!=''">
|
||||
<Cfg_1>true</Cfg_1>
|
||||
<CfgParent>Base</CfgParent>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Cfg_1)'=='true') or '$(Cfg_1_Win32)'!=''">
|
||||
<Cfg_1_Win32>true</Cfg_1_Win32>
|
||||
<CfgParent>Cfg_1</CfgParent>
|
||||
<Cfg_1>true</Cfg_1>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Config)'=='Release' or '$(Cfg_2)'!=''">
|
||||
<Cfg_2>true</Cfg_2>
|
||||
<CfgParent>Base</CfgParent>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Base)'!=''">
|
||||
<DCC_DcuOutput>.\$(Platform)\$(Config)</DCC_DcuOutput>
|
||||
<DCC_ExeOutput>.\$(Platform)\$(Config)</DCC_ExeOutput>
|
||||
<DCC_E>false</DCC_E>
|
||||
<DCC_N>false</DCC_N>
|
||||
<DCC_S>false</DCC_S>
|
||||
<DCC_F>false</DCC_F>
|
||||
<DCC_K>false</DCC_K>
|
||||
<GenDll>true</GenDll>
|
||||
<GenPackage>true</GenPackage>
|
||||
<DCC_Namespace>System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace)</DCC_Namespace>
|
||||
<DCC_CBuilderOutput>All</DCC_CBuilderOutput>
|
||||
<SanitizedProjectName>loggerproRT</SanitizedProjectName>
|
||||
<RuntimeOnlyPackage>true</RuntimeOnlyPackage>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Base_Android)'!=''">
|
||||
<DCC_CBuilderOutput>None</DCC_CBuilderOutput>
|
||||
<EnabledSysJars>android-support-v4.dex.jar;cloud-messaging.dex.jar;fmx.dex.jar;google-analytics-v2.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar;google-play-services-ads-7.0.0.dex.jar;google-play-services-analytics-7.0.0.dex.jar;google-play-services-base-7.0.0.dex.jar;google-play-services-gcm-7.0.0.dex.jar;google-play-services-identity-7.0.0.dex.jar;google-play-services-maps-7.0.0.dex.jar;google-play-services-panorama-7.0.0.dex.jar;google-play-services-plus-7.0.0.dex.jar;google-play-services-wallet-7.0.0.dex.jar</EnabledSysJars>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Base_Win32)'!=''">
|
||||
<DCC_Namespace>Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)</DCC_Namespace>
|
||||
<BT_BuildType>Debug</BT_BuildType>
|
||||
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
|
||||
<VerInfo_Keys>CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=</VerInfo_Keys>
|
||||
<VerInfo_Locale>1033</VerInfo_Locale>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Cfg_1)'!=''">
|
||||
<DCC_Define>DEBUG;$(DCC_Define)</DCC_Define>
|
||||
<DCC_DebugDCUs>true</DCC_DebugDCUs>
|
||||
<DCC_Optimize>false</DCC_Optimize>
|
||||
<DCC_GenerateStackFrames>true</DCC_GenerateStackFrames>
|
||||
<DCC_DebugInfoInExe>true</DCC_DebugInfoInExe>
|
||||
<DCC_RemoteDebug>true</DCC_RemoteDebug>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Cfg_1_Win32)'!=''">
|
||||
<DCC_RemoteDebug>false</DCC_RemoteDebug>
|
||||
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
|
||||
<VerInfo_Locale>1033</VerInfo_Locale>
|
||||
<DCC_Description>LoggerPro</DCC_Description>
|
||||
<DllSuffix>xe7</DllSuffix>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Cfg_2)'!=''">
|
||||
<DCC_LocalDebugSymbols>false</DCC_LocalDebugSymbols>
|
||||
<DCC_Define>RELEASE;$(DCC_Define)</DCC_Define>
|
||||
<DCC_SymbolReferenceInfo>0</DCC_SymbolReferenceInfo>
|
||||
<DCC_DebugInformation>0</DCC_DebugInformation>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<DelphiCompile Include="$(MainSource)">
|
||||
<MainSource>MainSource</MainSource>
|
||||
</DelphiCompile>
|
||||
<DCCReference Include="rtl.dcp"/>
|
||||
<DCCReference Include="IndySystem.dcp"/>
|
||||
<DCCReference Include="IndyProtocols.dcp"/>
|
||||
<DCCReference Include="IndyCore.dcp"/>
|
||||
<DCCReference Include="..\..\LoggerPro.EMailAppender.pas"/>
|
||||
<DCCReference Include="..\..\LoggerPro.FileAppender.pas"/>
|
||||
<DCCReference Include="..\..\LoggerPro.GlobalLogger.pas"/>
|
||||
<DCCReference Include="..\..\LoggerPro.MemoryAppender.pas"/>
|
||||
<DCCReference Include="..\..\LoggerPro.pas"/>
|
||||
<DCCReference Include="..\..\LoggerPro.Proxy.pas"/>
|
||||
<DCCReference Include="..\..\LoggerPro.UDPSyslogAppender.pas"/>
|
||||
<DCCReference Include="..\..\LoggerPro.Utils.pas"/>
|
||||
<DCCReference Include="..\..\ThreadSafeQueueU.pas"/>
|
||||
<BuildConfiguration Include="Release">
|
||||
<Key>Cfg_2</Key>
|
||||
<CfgParent>Base</CfgParent>
|
||||
</BuildConfiguration>
|
||||
<BuildConfiguration Include="Base">
|
||||
<Key>Base</Key>
|
||||
</BuildConfiguration>
|
||||
<BuildConfiguration Include="Debug">
|
||||
<Key>Cfg_1</Key>
|
||||
<CfgParent>Base</CfgParent>
|
||||
</BuildConfiguration>
|
||||
</ItemGroup>
|
||||
<ProjectExtensions>
|
||||
<Borland.Personality>Delphi.Personality.12</Borland.Personality>
|
||||
<Borland.ProjectType>Package</Borland.ProjectType>
|
||||
<BorlandProject>
|
||||
<Delphi.Personality>
|
||||
<Source>
|
||||
<Source Name="MainSource">loggerproRT.dpk</Source>
|
||||
</Source>
|
||||
<Excluded_Packages>
|
||||
<Excluded_Packages Name="$(BDSBIN)\bcboffice2k260.bpl">Embarcadero C++Builder Office 2000 Servers Package</Excluded_Packages>
|
||||
<Excluded_Packages Name="$(BDSBIN)\bcbofficexp260.bpl">Embarcadero C++Builder Office XP Servers Package</Excluded_Packages>
|
||||
<Excluded_Packages Name="$(BDSBIN)\dcloffice2k260.bpl">Microsoft Office 2000 Sample Automation Server Wrapper Components</Excluded_Packages>
|
||||
<Excluded_Packages Name="$(BDSBIN)\dclofficexp260.bpl">Microsoft Office XP Sample Automation Server Wrapper Components</Excluded_Packages>
|
||||
</Excluded_Packages>
|
||||
</Delphi.Personality>
|
||||
<Deployment Version="3">
|
||||
<DeployFile LocalName="$(BDS)\Redist\osx32\libcgunwind.1.0.dylib" Class="DependencyModule">
|
||||
<Platform Name="OSX32">
|
||||
<Overwrite>true</Overwrite>
|
||||
</Platform>
|
||||
</DeployFile>
|
||||
<DeployFile LocalName="$(BDS)\Redist\osx64\libcgsqlite3.dylib" Class="DependencyModule">
|
||||
<Platform Name="OSX64">
|
||||
<Overwrite>true</Overwrite>
|
||||
</Platform>
|
||||
</DeployFile>
|
||||
<DeployFile LocalName="$(BDS)\Redist\iossimulator\libPCRE.dylib" Class="DependencyModule">
|
||||
<Platform Name="iOSSimulator">
|
||||
<Overwrite>true</Overwrite>
|
||||
</Platform>
|
||||
</DeployFile>
|
||||
<DeployFile LocalName="$(BDS)\Redist\iossimulator\libcgunwind.1.0.dylib" Class="DependencyModule">
|
||||
<Platform Name="iOSSimulator">
|
||||
<Overwrite>true</Overwrite>
|
||||
</Platform>
|
||||
</DeployFile>
|
||||
<DeployFile LocalName="$(BDS)\Redist\iossimulator\libpcre.dylib" Class="DependencyModule">
|
||||
<Platform Name="iOSSimulator">
|
||||
<Overwrite>true</Overwrite>
|
||||
</Platform>
|
||||
</DeployFile>
|
||||
<DeployFile LocalName="$(BDS)\Redist\osx32\libcgsqlite3.dylib" Class="DependencyModule">
|
||||
<Platform Name="OSX32">
|
||||
<Overwrite>true</Overwrite>
|
||||
</Platform>
|
||||
</DeployFile>
|
||||
<DeployFile LocalName="C:\Users\Public\Documents\Embarcadero\Studio\20.0\Bpl\loggerproRTxe7.bpl" Configuration="Debug" Class="ProjectOutput">
|
||||
<Platform Name="Win32">
|
||||
<RemoteName>loggerproRT.bpl</RemoteName>
|
||||
<Overwrite>true</Overwrite>
|
||||
</Platform>
|
||||
</DeployFile>
|
||||
<DeployClass Name="AdditionalDebugSymbols">
|
||||
<Platform Name="OSX32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Win32">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="AndroidClassesDexFile">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>classes</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="AndroidFileProvider">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\xml</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="AndroidGDBServer">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="AndroidLibnativeArmeabiFile">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>library\lib\armeabi</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="AndroidLibnativeMipsFile">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>library\lib\mips</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="AndroidServiceOutput">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="AndroidSplashImageDef">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="AndroidSplashStyles">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\values</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="AndroidSplashStylesV21">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\values-v21</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_DefaultAppIcon">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_LauncherIcon144">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable-xxhdpi</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_LauncherIcon36">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable-ldpi</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_LauncherIcon48">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable-mdpi</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_LauncherIcon72">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable-hdpi</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_LauncherIcon96">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable-xhdpi</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_SplashImage426">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable-small</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_SplashImage470">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable-normal</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_SplashImage640">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable-large</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_SplashImage960">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable-xlarge</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="DebugSymbols">
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="OSX32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Win32">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="DependencyFramework">
|
||||
<Platform Name="OSX32">
|
||||
<Operation>1</Operation>
|
||||
<Extensions>.framework</Extensions>
|
||||
</Platform>
|
||||
<Platform Name="OSX64">
|
||||
<Operation>1</Operation>
|
||||
<Extensions>.framework</Extensions>
|
||||
</Platform>
|
||||
<Platform Name="Win32">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="DependencyModule">
|
||||
<Platform Name="OSX32">
|
||||
<Operation>1</Operation>
|
||||
<Extensions>.dylib</Extensions>
|
||||
</Platform>
|
||||
<Platform Name="OSX64">
|
||||
<Operation>1</Operation>
|
||||
<Extensions>.dylib</Extensions>
|
||||
</Platform>
|
||||
<Platform Name="Win32">
|
||||
<Operation>0</Operation>
|
||||
<Extensions>.dll;.bpl</Extensions>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Required="true" Name="DependencyPackage">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
<Extensions>.dylib</Extensions>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
<Extensions>.dylib</Extensions>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
<Extensions>.dylib</Extensions>
|
||||
</Platform>
|
||||
<Platform Name="OSX32">
|
||||
<Operation>1</Operation>
|
||||
<Extensions>.dylib</Extensions>
|
||||
</Platform>
|
||||
<Platform Name="OSX64">
|
||||
<Operation>1</Operation>
|
||||
<Extensions>.dylib</Extensions>
|
||||
</Platform>
|
||||
<Platform Name="Win32">
|
||||
<Operation>0</Operation>
|
||||
<Extensions>.bpl</Extensions>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="File">
|
||||
<Platform Name="Android">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
<Platform Name="OSX32">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
<Platform Name="OSX64">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Win32">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="iPad_Launch1024">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="iPad_Launch1536">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="iPad_Launch2048">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="iPad_Launch768">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="iPhone_Launch320">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="iPhone_Launch640">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="iPhone_Launch640x1136">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="ProjectAndroidManifest">
|
||||
<Platform Name="Android">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="ProjectiOSDeviceDebug">
|
||||
<Platform Name="iOSDevice32">
|
||||
<RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="ProjectiOSDeviceResourceRules"/>
|
||||
<DeployClass Name="ProjectiOSEntitlements"/>
|
||||
<DeployClass Name="ProjectiOSInfoPList"/>
|
||||
<DeployClass Name="ProjectiOSResource">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="ProjectOSXDebug"/>
|
||||
<DeployClass Name="ProjectOSXEntitlements"/>
|
||||
<DeployClass Name="ProjectOSXInfoPList"/>
|
||||
<DeployClass Name="ProjectOSXResource">
|
||||
<Platform Name="OSX32">
|
||||
<RemoteDir>Contents\Resources</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="OSX64">
|
||||
<RemoteDir>Contents\Resources</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Required="true" Name="ProjectOutput">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Linux64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="OSX32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="OSX64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Win32">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="ProjectUWPManifest">
|
||||
<Platform Name="Win32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Win64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="UWP_DelphiLogo150">
|
||||
<Platform Name="Win32">
|
||||
<RemoteDir>Assets</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Win64">
|
||||
<RemoteDir>Assets</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="UWP_DelphiLogo44">
|
||||
<Platform Name="Win32">
|
||||
<RemoteDir>Assets</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Win64">
|
||||
<RemoteDir>Assets</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<ProjectRoot Platform="iOSDevice64" Name="$(PROJECTNAME).app"/>
|
||||
<ProjectRoot Platform="Win64" Name="$(PROJECTNAME)"/>
|
||||
<ProjectRoot Platform="iOSDevice32" Name="$(PROJECTNAME).app"/>
|
||||
<ProjectRoot Platform="Linux64" Name="$(PROJECTNAME)"/>
|
||||
<ProjectRoot Platform="Win32" Name="$(PROJECTNAME)"/>
|
||||
<ProjectRoot Platform="OSX32" Name="$(PROJECTNAME)"/>
|
||||
<ProjectRoot Platform="Android" Name="$(PROJECTNAME)"/>
|
||||
<ProjectRoot Platform="OSX64" Name="$(PROJECTNAME)"/>
|
||||
<ProjectRoot Platform="iOSSimulator" Name="$(PROJECTNAME).app"/>
|
||||
</Deployment>
|
||||
<Platforms>
|
||||
<Platform value="Android">False</Platform>
|
||||
<Platform value="Linux64">False</Platform>
|
||||
<Platform value="Win32">True</Platform>
|
||||
<Platform value="Win64">False</Platform>
|
||||
</Platforms>
|
||||
</BorlandProject>
|
||||
<ProjectFileVersion>12</ProjectFileVersion>
|
||||
</ProjectExtensions>
|
||||
<Import Project="$(BDS)\Bin\CodeGear.Delphi.Targets" Condition="Exists('$(BDS)\Bin\CodeGear.Delphi.Targets')"/>
|
||||
<Import Project="$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj" Condition="Exists('$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj')"/>
|
||||
<Import Project="$(MSBuildProjectName).deployproj" Condition="Exists('$(MSBuildProjectName).deployproj')"/>
|
||||
</Project>
|
50
lib/loggerpro/packages/dxe8/loggerproRT.dpk
Normal file
50
lib/loggerpro/packages/dxe8/loggerproRT.dpk
Normal file
@ -0,0 +1,50 @@
|
||||
package loggerproRT;
|
||||
|
||||
{$R *.res}
|
||||
{$IFDEF IMPLICITBUILDING This IFDEF should not be used by users}
|
||||
{$ALIGN 8}
|
||||
{$ASSERTIONS ON}
|
||||
{$BOOLEVAL OFF}
|
||||
{$DEBUGINFO OFF}
|
||||
{$EXTENDEDSYNTAX ON}
|
||||
{$IMPORTEDDATA ON}
|
||||
{$IOCHECKS ON}
|
||||
{$LOCALSYMBOLS ON}
|
||||
{$LONGSTRINGS ON}
|
||||
{$OPENSTRINGS ON}
|
||||
{$OPTIMIZATION OFF}
|
||||
{$OVERFLOWCHECKS OFF}
|
||||
{$RANGECHECKS OFF}
|
||||
{$REFERENCEINFO ON}
|
||||
{$SAFEDIVIDE OFF}
|
||||
{$STACKFRAMES ON}
|
||||
{$TYPEDADDRESS OFF}
|
||||
{$VARSTRINGCHECKS ON}
|
||||
{$WRITEABLECONST OFF}
|
||||
{$MINENUMSIZE 1}
|
||||
{$IMAGEBASE $400000}
|
||||
{$DEFINE DEBUG}
|
||||
{$ENDIF IMPLICITBUILDING}
|
||||
{$DESCRIPTION 'LoggerPro'}
|
||||
{$LIBSUFFIX 'xe8'}
|
||||
{$RUNONLY}
|
||||
{$IMPLICITBUILD ON}
|
||||
|
||||
requires
|
||||
rtl,
|
||||
IndySystem,
|
||||
IndyProtocols,
|
||||
IndyCore;
|
||||
|
||||
contains
|
||||
LoggerPro.EMailAppender in '..\..\LoggerPro.EMailAppender.pas',
|
||||
LoggerPro.FileAppender in '..\..\LoggerPro.FileAppender.pas',
|
||||
LoggerPro.GlobalLogger in '..\..\LoggerPro.GlobalLogger.pas',
|
||||
LoggerPro.MemoryAppender in '..\..\LoggerPro.MemoryAppender.pas',
|
||||
LoggerPro in '..\..\LoggerPro.pas',
|
||||
LoggerPro.Proxy in '..\..\LoggerPro.Proxy.pas',
|
||||
LoggerPro.UDPSyslogAppender in '..\..\LoggerPro.UDPSyslogAppender.pas',
|
||||
LoggerPro.Utils in '..\..\LoggerPro.Utils.pas',
|
||||
ThreadSafeQueueU in '..\..\ThreadSafeQueueU.pas';
|
||||
|
||||
end.
|
575
lib/loggerpro/packages/dxe8/loggerproRT.dproj
Normal file
575
lib/loggerpro/packages/dxe8/loggerproRT.dproj
Normal file
@ -0,0 +1,575 @@
|
||||
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<ProjectGuid>{1611FBE6-5266-48FE-BDF5-E46EEAA922BE}</ProjectGuid>
|
||||
<MainSource>loggerproRT.dpk</MainSource>
|
||||
<ProjectVersion>18.6</ProjectVersion>
|
||||
<FrameworkType>None</FrameworkType>
|
||||
<Base>True</Base>
|
||||
<Config Condition="'$(Config)'==''">Debug</Config>
|
||||
<Platform Condition="'$(Platform)'==''">Win32</Platform>
|
||||
<TargetedPlatforms>1</TargetedPlatforms>
|
||||
<AppType>Package</AppType>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''">
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="('$(Platform)'=='Android' and '$(Base)'=='true') or '$(Base_Android)'!=''">
|
||||
<Base_Android>true</Base_Android>
|
||||
<CfgParent>Base</CfgParent>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Base)'=='true') or '$(Base_Win32)'!=''">
|
||||
<Base_Win32>true</Base_Win32>
|
||||
<CfgParent>Base</CfgParent>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Config)'=='Debug' or '$(Cfg_1)'!=''">
|
||||
<Cfg_1>true</Cfg_1>
|
||||
<CfgParent>Base</CfgParent>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Cfg_1)'=='true') or '$(Cfg_1_Win32)'!=''">
|
||||
<Cfg_1_Win32>true</Cfg_1_Win32>
|
||||
<CfgParent>Cfg_1</CfgParent>
|
||||
<Cfg_1>true</Cfg_1>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Config)'=='Release' or '$(Cfg_2)'!=''">
|
||||
<Cfg_2>true</Cfg_2>
|
||||
<CfgParent>Base</CfgParent>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Base)'!=''">
|
||||
<DCC_DcuOutput>.\$(Platform)\$(Config)</DCC_DcuOutput>
|
||||
<DCC_ExeOutput>.\$(Platform)\$(Config)</DCC_ExeOutput>
|
||||
<DCC_E>false</DCC_E>
|
||||
<DCC_N>false</DCC_N>
|
||||
<DCC_S>false</DCC_S>
|
||||
<DCC_F>false</DCC_F>
|
||||
<DCC_K>false</DCC_K>
|
||||
<GenDll>true</GenDll>
|
||||
<GenPackage>true</GenPackage>
|
||||
<DCC_Namespace>System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace)</DCC_Namespace>
|
||||
<DCC_CBuilderOutput>All</DCC_CBuilderOutput>
|
||||
<SanitizedProjectName>loggerproRT</SanitizedProjectName>
|
||||
<RuntimeOnlyPackage>true</RuntimeOnlyPackage>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Base_Android)'!=''">
|
||||
<DCC_CBuilderOutput>None</DCC_CBuilderOutput>
|
||||
<EnabledSysJars>android-support-v4.dex.jar;cloud-messaging.dex.jar;fmx.dex.jar;google-analytics-v2.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar;google-play-services-ads-7.0.0.dex.jar;google-play-services-analytics-7.0.0.dex.jar;google-play-services-base-7.0.0.dex.jar;google-play-services-gcm-7.0.0.dex.jar;google-play-services-identity-7.0.0.dex.jar;google-play-services-maps-7.0.0.dex.jar;google-play-services-panorama-7.0.0.dex.jar;google-play-services-plus-7.0.0.dex.jar;google-play-services-wallet-7.0.0.dex.jar</EnabledSysJars>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Base_Win32)'!=''">
|
||||
<DCC_Namespace>Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)</DCC_Namespace>
|
||||
<BT_BuildType>Debug</BT_BuildType>
|
||||
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
|
||||
<VerInfo_Keys>CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=</VerInfo_Keys>
|
||||
<VerInfo_Locale>1033</VerInfo_Locale>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Cfg_1)'!=''">
|
||||
<DCC_Define>DEBUG;$(DCC_Define)</DCC_Define>
|
||||
<DCC_DebugDCUs>true</DCC_DebugDCUs>
|
||||
<DCC_Optimize>false</DCC_Optimize>
|
||||
<DCC_GenerateStackFrames>true</DCC_GenerateStackFrames>
|
||||
<DCC_DebugInfoInExe>true</DCC_DebugInfoInExe>
|
||||
<DCC_RemoteDebug>true</DCC_RemoteDebug>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Cfg_1_Win32)'!=''">
|
||||
<DCC_RemoteDebug>false</DCC_RemoteDebug>
|
||||
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
|
||||
<VerInfo_Locale>1033</VerInfo_Locale>
|
||||
<DCC_Description>LoggerPro</DCC_Description>
|
||||
<DllSuffix>xe8</DllSuffix>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Cfg_2)'!=''">
|
||||
<DCC_LocalDebugSymbols>false</DCC_LocalDebugSymbols>
|
||||
<DCC_Define>RELEASE;$(DCC_Define)</DCC_Define>
|
||||
<DCC_SymbolReferenceInfo>0</DCC_SymbolReferenceInfo>
|
||||
<DCC_DebugInformation>0</DCC_DebugInformation>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<DelphiCompile Include="$(MainSource)">
|
||||
<MainSource>MainSource</MainSource>
|
||||
</DelphiCompile>
|
||||
<DCCReference Include="rtl.dcp"/>
|
||||
<DCCReference Include="IndySystem.dcp"/>
|
||||
<DCCReference Include="IndyProtocols.dcp"/>
|
||||
<DCCReference Include="IndyCore.dcp"/>
|
||||
<DCCReference Include="..\..\LoggerPro.EMailAppender.pas"/>
|
||||
<DCCReference Include="..\..\LoggerPro.FileAppender.pas"/>
|
||||
<DCCReference Include="..\..\LoggerPro.GlobalLogger.pas"/>
|
||||
<DCCReference Include="..\..\LoggerPro.MemoryAppender.pas"/>
|
||||
<DCCReference Include="..\..\LoggerPro.pas"/>
|
||||
<DCCReference Include="..\..\LoggerPro.Proxy.pas"/>
|
||||
<DCCReference Include="..\..\LoggerPro.UDPSyslogAppender.pas"/>
|
||||
<DCCReference Include="..\..\LoggerPro.Utils.pas"/>
|
||||
<DCCReference Include="..\..\ThreadSafeQueueU.pas"/>
|
||||
<BuildConfiguration Include="Release">
|
||||
<Key>Cfg_2</Key>
|
||||
<CfgParent>Base</CfgParent>
|
||||
</BuildConfiguration>
|
||||
<BuildConfiguration Include="Base">
|
||||
<Key>Base</Key>
|
||||
</BuildConfiguration>
|
||||
<BuildConfiguration Include="Debug">
|
||||
<Key>Cfg_1</Key>
|
||||
<CfgParent>Base</CfgParent>
|
||||
</BuildConfiguration>
|
||||
</ItemGroup>
|
||||
<ProjectExtensions>
|
||||
<Borland.Personality>Delphi.Personality.12</Borland.Personality>
|
||||
<Borland.ProjectType>Package</Borland.ProjectType>
|
||||
<BorlandProject>
|
||||
<Delphi.Personality>
|
||||
<Source>
|
||||
<Source Name="MainSource">loggerproRT.dpk</Source>
|
||||
</Source>
|
||||
<Excluded_Packages>
|
||||
<Excluded_Packages Name="$(BDSBIN)\bcboffice2k260.bpl">Embarcadero C++Builder Office 2000 Servers Package</Excluded_Packages>
|
||||
<Excluded_Packages Name="$(BDSBIN)\bcbofficexp260.bpl">Embarcadero C++Builder Office XP Servers Package</Excluded_Packages>
|
||||
<Excluded_Packages Name="$(BDSBIN)\dcloffice2k260.bpl">Microsoft Office 2000 Sample Automation Server Wrapper Components</Excluded_Packages>
|
||||
<Excluded_Packages Name="$(BDSBIN)\dclofficexp260.bpl">Microsoft Office XP Sample Automation Server Wrapper Components</Excluded_Packages>
|
||||
</Excluded_Packages>
|
||||
</Delphi.Personality>
|
||||
<Deployment Version="3">
|
||||
<DeployFile LocalName="$(BDS)\Redist\osx32\libcgunwind.1.0.dylib" Class="DependencyModule">
|
||||
<Platform Name="OSX32">
|
||||
<Overwrite>true</Overwrite>
|
||||
</Platform>
|
||||
</DeployFile>
|
||||
<DeployFile LocalName="C:\Users\Public\Documents\Embarcadero\Studio\20.0\Bpl\loggerproRTxe7.bpl" Configuration="Debug" Class="ProjectOutput">
|
||||
<Platform Name="Win32">
|
||||
<RemoteName>loggerproRT.bpl</RemoteName>
|
||||
<Overwrite>true</Overwrite>
|
||||
</Platform>
|
||||
</DeployFile>
|
||||
<DeployFile LocalName="$(BDS)\Redist\osx64\libcgsqlite3.dylib" Class="DependencyModule">
|
||||
<Platform Name="OSX64">
|
||||
<Overwrite>true</Overwrite>
|
||||
</Platform>
|
||||
</DeployFile>
|
||||
<DeployFile LocalName="$(BDS)\Redist\iossimulator\libPCRE.dylib" Class="DependencyModule">
|
||||
<Platform Name="iOSSimulator">
|
||||
<Overwrite>true</Overwrite>
|
||||
</Platform>
|
||||
</DeployFile>
|
||||
<DeployFile LocalName="$(BDS)\Redist\iossimulator\libcgunwind.1.0.dylib" Class="DependencyModule">
|
||||
<Platform Name="iOSSimulator">
|
||||
<Overwrite>true</Overwrite>
|
||||
</Platform>
|
||||
</DeployFile>
|
||||
<DeployFile LocalName="$(BDS)\Redist\iossimulator\libpcre.dylib" Class="DependencyModule">
|
||||
<Platform Name="iOSSimulator">
|
||||
<Overwrite>true</Overwrite>
|
||||
</Platform>
|
||||
</DeployFile>
|
||||
<DeployFile LocalName="$(BDS)\Redist\osx32\libcgsqlite3.dylib" Class="DependencyModule">
|
||||
<Platform Name="OSX32">
|
||||
<Overwrite>true</Overwrite>
|
||||
</Platform>
|
||||
</DeployFile>
|
||||
<DeployClass Name="AdditionalDebugSymbols">
|
||||
<Platform Name="OSX32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Win32">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="AndroidClassesDexFile">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>classes</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="AndroidFileProvider">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\xml</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="AndroidGDBServer">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="AndroidLibnativeArmeabiFile">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>library\lib\armeabi</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="AndroidLibnativeMipsFile">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>library\lib\mips</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="AndroidServiceOutput">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="AndroidSplashImageDef">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="AndroidSplashStyles">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\values</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="AndroidSplashStylesV21">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\values-v21</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_DefaultAppIcon">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_LauncherIcon144">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable-xxhdpi</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_LauncherIcon36">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable-ldpi</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_LauncherIcon48">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable-mdpi</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_LauncherIcon72">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable-hdpi</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_LauncherIcon96">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable-xhdpi</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_SplashImage426">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable-small</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_SplashImage470">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable-normal</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_SplashImage640">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable-large</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_SplashImage960">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable-xlarge</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="DebugSymbols">
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="OSX32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Win32">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="DependencyFramework">
|
||||
<Platform Name="OSX32">
|
||||
<Operation>1</Operation>
|
||||
<Extensions>.framework</Extensions>
|
||||
</Platform>
|
||||
<Platform Name="OSX64">
|
||||
<Operation>1</Operation>
|
||||
<Extensions>.framework</Extensions>
|
||||
</Platform>
|
||||
<Platform Name="Win32">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="DependencyModule">
|
||||
<Platform Name="OSX32">
|
||||
<Operation>1</Operation>
|
||||
<Extensions>.dylib</Extensions>
|
||||
</Platform>
|
||||
<Platform Name="OSX64">
|
||||
<Operation>1</Operation>
|
||||
<Extensions>.dylib</Extensions>
|
||||
</Platform>
|
||||
<Platform Name="Win32">
|
||||
<Operation>0</Operation>
|
||||
<Extensions>.dll;.bpl</Extensions>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Required="true" Name="DependencyPackage">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
<Extensions>.dylib</Extensions>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
<Extensions>.dylib</Extensions>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
<Extensions>.dylib</Extensions>
|
||||
</Platform>
|
||||
<Platform Name="OSX32">
|
||||
<Operation>1</Operation>
|
||||
<Extensions>.dylib</Extensions>
|
||||
</Platform>
|
||||
<Platform Name="OSX64">
|
||||
<Operation>1</Operation>
|
||||
<Extensions>.dylib</Extensions>
|
||||
</Platform>
|
||||
<Platform Name="Win32">
|
||||
<Operation>0</Operation>
|
||||
<Extensions>.bpl</Extensions>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="File">
|
||||
<Platform Name="Android">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
<Platform Name="OSX32">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
<Platform Name="OSX64">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Win32">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="iPad_Launch1024">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="iPad_Launch1536">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="iPad_Launch2048">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="iPad_Launch768">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="iPhone_Launch320">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="iPhone_Launch640">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="iPhone_Launch640x1136">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="ProjectAndroidManifest">
|
||||
<Platform Name="Android">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="ProjectiOSDeviceDebug">
|
||||
<Platform Name="iOSDevice32">
|
||||
<RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="ProjectiOSDeviceResourceRules"/>
|
||||
<DeployClass Name="ProjectiOSEntitlements"/>
|
||||
<DeployClass Name="ProjectiOSInfoPList"/>
|
||||
<DeployClass Name="ProjectiOSResource">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="ProjectOSXDebug"/>
|
||||
<DeployClass Name="ProjectOSXEntitlements"/>
|
||||
<DeployClass Name="ProjectOSXInfoPList"/>
|
||||
<DeployClass Name="ProjectOSXResource">
|
||||
<Platform Name="OSX32">
|
||||
<RemoteDir>Contents\Resources</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="OSX64">
|
||||
<RemoteDir>Contents\Resources</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Required="true" Name="ProjectOutput">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Linux64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="OSX32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="OSX64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Win32">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="ProjectUWPManifest">
|
||||
<Platform Name="Win32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Win64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="UWP_DelphiLogo150">
|
||||
<Platform Name="Win32">
|
||||
<RemoteDir>Assets</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Win64">
|
||||
<RemoteDir>Assets</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="UWP_DelphiLogo44">
|
||||
<Platform Name="Win32">
|
||||
<RemoteDir>Assets</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Win64">
|
||||
<RemoteDir>Assets</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<ProjectRoot Platform="iOSDevice64" Name="$(PROJECTNAME).app"/>
|
||||
<ProjectRoot Platform="Win64" Name="$(PROJECTNAME)"/>
|
||||
<ProjectRoot Platform="iOSDevice32" Name="$(PROJECTNAME).app"/>
|
||||
<ProjectRoot Platform="Linux64" Name="$(PROJECTNAME)"/>
|
||||
<ProjectRoot Platform="Win32" Name="$(PROJECTNAME)"/>
|
||||
<ProjectRoot Platform="OSX32" Name="$(PROJECTNAME)"/>
|
||||
<ProjectRoot Platform="Android" Name="$(PROJECTNAME)"/>
|
||||
<ProjectRoot Platform="OSX64" Name="$(PROJECTNAME)"/>
|
||||
<ProjectRoot Platform="iOSSimulator" Name="$(PROJECTNAME).app"/>
|
||||
</Deployment>
|
||||
<Platforms>
|
||||
<Platform value="Android">False</Platform>
|
||||
<Platform value="Linux64">False</Platform>
|
||||
<Platform value="Win32">True</Platform>
|
||||
<Platform value="Win64">False</Platform>
|
||||
</Platforms>
|
||||
</BorlandProject>
|
||||
<ProjectFileVersion>12</ProjectFileVersion>
|
||||
</ProjectExtensions>
|
||||
<Import Project="$(BDS)\Bin\CodeGear.Delphi.Targets" Condition="Exists('$(BDS)\Bin\CodeGear.Delphi.Targets')"/>
|
||||
<Import Project="$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj" Condition="Exists('$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj')"/>
|
||||
<Import Project="$(MSBuildProjectName).deployproj" Condition="Exists('$(MSBuildProjectName).deployproj')"/>
|
||||
</Project>
|
58
packages/dxe7/dmvcframeworkDT.dpk
Normal file
58
packages/dxe7/dmvcframeworkDT.dpk
Normal file
@ -0,0 +1,58 @@
|
||||
package dmvcframeworkDT;
|
||||
|
||||
{$R *.res}
|
||||
{$R *.dres}
|
||||
{$IFDEF IMPLICITBUILDING This IFDEF should not be used by users}
|
||||
{$ALIGN 8}
|
||||
{$ASSERTIONS ON}
|
||||
{$BOOLEVAL OFF}
|
||||
{$DEBUGINFO OFF}
|
||||
{$EXTENDEDSYNTAX ON}
|
||||
{$IMPORTEDDATA ON}
|
||||
{$IOCHECKS ON}
|
||||
{$LOCALSYMBOLS ON}
|
||||
{$LONGSTRINGS ON}
|
||||
{$OPENSTRINGS ON}
|
||||
{$OPTIMIZATION OFF}
|
||||
{$OVERFLOWCHECKS OFF}
|
||||
{$RANGECHECKS OFF}
|
||||
{$REFERENCEINFO ON}
|
||||
{$SAFEDIVIDE OFF}
|
||||
{$STACKFRAMES ON}
|
||||
{$TYPEDADDRESS OFF}
|
||||
{$VARSTRINGCHECKS ON}
|
||||
{$WRITEABLECONST OFF}
|
||||
{$MINENUMSIZE 1}
|
||||
{$IMAGEBASE $400000}
|
||||
{$DEFINE DEBUG}
|
||||
{$ENDIF IMPLICITBUILDING}
|
||||
{$DESCRIPTION 'DelphiMVCFramework IDE Expert'}
|
||||
{$LIBSUFFIX 'xe7'}
|
||||
{$IMPLICITBUILD ON}
|
||||
|
||||
requires
|
||||
rtl,
|
||||
designide,
|
||||
ExpertsCreators,
|
||||
IndySystem,
|
||||
IndyProtocols,
|
||||
IndyCore,
|
||||
dbrtl,
|
||||
dmvcframeworkRT;
|
||||
|
||||
contains
|
||||
DMVC.Expert.CodeGen.NewControllerUnit in '..\..\ideexpert\DMVC.Expert.CodeGen.NewControllerUnit.pas',
|
||||
DMVC.Expert.CodeGen.NewDMVCProject in '..\..\ideexpert\DMVC.Expert.CodeGen.NewDMVCProject.pas',
|
||||
DMVC.Expert.CodeGen.NewProject in '..\..\ideexpert\DMVC.Expert.CodeGen.NewProject.pas',
|
||||
DMVC.Expert.CodeGen.NewUnit in '..\..\ideexpert\DMVC.Expert.CodeGen.NewUnit.pas',
|
||||
DMVC.Expert.CodeGen.NewWebModuleUnit in '..\..\ideexpert\DMVC.Expert.CodeGen.NewWebModuleUnit.pas',
|
||||
DMVC.Expert.CodeGen.SourceFile in '..\..\ideexpert\DMVC.Expert.CodeGen.SourceFile.pas',
|
||||
DMVC.Expert.CodeGen.Templates in '..\..\ideexpert\DMVC.Expert.CodeGen.Templates.pas',
|
||||
DMVC.Expert.Forms.NewProjectWizard in '..\..\ideexpert\DMVC.Expert.Forms.NewProjectWizard.pas' {frmDMVCNewProject},
|
||||
DMVC.Expert.Forms.NewUnitWizard in '..\..\ideexpert\DMVC.Expert.Forms.NewUnitWizard.pas' {frmDMVCNewUnit},
|
||||
DMVC.Expert.NewUnitWizardEx in '..\..\ideexpert\DMVC.Expert.NewUnitWizardEx.pas',
|
||||
DMVC.Expert.ProjectWizardEx in '..\..\ideexpert\DMVC.Expert.ProjectWizardEx.pas',
|
||||
DMVC.Expert.Registration in '..\..\ideexpert\DMVC.Expert.Registration.pas',
|
||||
DMVC.Splash.Registration in '..\..\ideexpert\DMVC.Splash.Registration.pas';
|
||||
|
||||
end.
|
629
packages/dxe7/dmvcframeworkDT.dproj
Normal file
629
packages/dxe7/dmvcframeworkDT.dproj
Normal file
@ -0,0 +1,629 @@
|
||||
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<ProjectGuid>{84344511-1DC2-41BA-8689-9F36C1D475BE}</ProjectGuid>
|
||||
<MainSource>dmvcframeworkDT.dpk</MainSource>
|
||||
<ProjectVersion>18.6</ProjectVersion>
|
||||
<FrameworkType>None</FrameworkType>
|
||||
<Base>True</Base>
|
||||
<Config Condition="'$(Config)'==''">Debug</Config>
|
||||
<Platform Condition="'$(Platform)'==''">Win32</Platform>
|
||||
<TargetedPlatforms>1</TargetedPlatforms>
|
||||
<AppType>Package</AppType>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''">
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="('$(Platform)'=='Android' and '$(Base)'=='true') or '$(Base_Android)'!=''">
|
||||
<Base_Android>true</Base_Android>
|
||||
<CfgParent>Base</CfgParent>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="('$(Platform)'=='Linux64' and '$(Base)'=='true') or '$(Base_Linux64)'!=''">
|
||||
<Base_Linux64>true</Base_Linux64>
|
||||
<CfgParent>Base</CfgParent>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Base)'=='true') or '$(Base_Win32)'!=''">
|
||||
<Base_Win32>true</Base_Win32>
|
||||
<CfgParent>Base</CfgParent>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="('$(Platform)'=='Win64' and '$(Base)'=='true') or '$(Base_Win64)'!=''">
|
||||
<Base_Win64>true</Base_Win64>
|
||||
<CfgParent>Base</CfgParent>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Config)'=='Debug' or '$(Cfg_1)'!=''">
|
||||
<Cfg_1>true</Cfg_1>
|
||||
<CfgParent>Base</CfgParent>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Cfg_1)'=='true') or '$(Cfg_1_Win32)'!=''">
|
||||
<Cfg_1_Win32>true</Cfg_1_Win32>
|
||||
<CfgParent>Cfg_1</CfgParent>
|
||||
<Cfg_1>true</Cfg_1>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Config)'=='Release' or '$(Cfg_2)'!=''">
|
||||
<Cfg_2>true</Cfg_2>
|
||||
<CfgParent>Base</CfgParent>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Cfg_2)'=='true') or '$(Cfg_2_Win32)'!=''">
|
||||
<Cfg_2_Win32>true</Cfg_2_Win32>
|
||||
<CfgParent>Cfg_2</CfgParent>
|
||||
<Cfg_2>true</Cfg_2>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Base)'!=''">
|
||||
<DCC_DcuOutput>.\$(Platform)\$(Config)</DCC_DcuOutput>
|
||||
<DCC_ExeOutput>.\$(Platform)\$(Config)</DCC_ExeOutput>
|
||||
<DCC_E>false</DCC_E>
|
||||
<DCC_N>false</DCC_N>
|
||||
<DCC_S>false</DCC_S>
|
||||
<DCC_F>false</DCC_F>
|
||||
<DCC_K>false</DCC_K>
|
||||
<GenDll>true</GenDll>
|
||||
<GenPackage>true</GenPackage>
|
||||
<DCC_Namespace>System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace)</DCC_Namespace>
|
||||
<DCC_CBuilderOutput>All</DCC_CBuilderOutput>
|
||||
<SanitizedProjectName>dmvcframeworkDT</SanitizedProjectName>
|
||||
<VerInfo_Locale>1040</VerInfo_Locale>
|
||||
<VerInfo_Keys>CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=</VerInfo_Keys>
|
||||
<DCC_Description>DelphiMVCFramework IDE Expert</DCC_Description>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Base_Android)'!=''">
|
||||
<DCC_CBuilderOutput>None</DCC_CBuilderOutput>
|
||||
<EnabledSysJars>android-support-v4.dex.jar;cloud-messaging.dex.jar;fmx.dex.jar;google-analytics-v2.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar;google-play-services.dex.jar</EnabledSysJars>
|
||||
<DCC_UsePackage>rtl;IndySystem;IndyProtocols;IndyCore;dbrtl;$(DCC_UsePackage)</DCC_UsePackage>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Base_Linux64)'!=''">
|
||||
<DCC_UsePackage>rtl;IndySystem;IndyProtocols;IndyCore;dbrtl;$(DCC_UsePackage)</DCC_UsePackage>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Base_Win32)'!=''">
|
||||
<DCC_Namespace>Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)</DCC_Namespace>
|
||||
<BT_BuildType>Debug</BT_BuildType>
|
||||
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
|
||||
<VerInfo_Keys>CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=</VerInfo_Keys>
|
||||
<VerInfo_Locale>1033</VerInfo_Locale>
|
||||
<DCC_UsePackage>rtl;IndySystem;IndyProtocols;IndyCore;dbrtl;dmvcframeworkRT;$(DCC_UsePackage)</DCC_UsePackage>
|
||||
<DCC_Description>DelphiMVCFramework IDE Expert</DCC_Description>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Base_Win64)'!=''">
|
||||
<DCC_UsePackage>rtl;IndySystem;IndyProtocols;IndyCore;dbrtl;$(DCC_UsePackage)</DCC_UsePackage>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Cfg_1)'!=''">
|
||||
<DCC_Define>DEBUG;$(DCC_Define)</DCC_Define>
|
||||
<DCC_DebugDCUs>true</DCC_DebugDCUs>
|
||||
<DCC_Optimize>false</DCC_Optimize>
|
||||
<DCC_GenerateStackFrames>true</DCC_GenerateStackFrames>
|
||||
<DCC_DebugInfoInExe>true</DCC_DebugInfoInExe>
|
||||
<DCC_RemoteDebug>true</DCC_RemoteDebug>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Cfg_1_Win32)'!=''">
|
||||
<DCC_RemoteDebug>false</DCC_RemoteDebug>
|
||||
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
|
||||
<VerInfo_Locale>1033</VerInfo_Locale>
|
||||
<DllSuffix>xe7</DllSuffix>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Cfg_2)'!=''">
|
||||
<DCC_LocalDebugSymbols>false</DCC_LocalDebugSymbols>
|
||||
<DCC_Define>RELEASE;$(DCC_Define)</DCC_Define>
|
||||
<DCC_SymbolReferenceInfo>0</DCC_SymbolReferenceInfo>
|
||||
<DCC_DebugInformation>0</DCC_DebugInformation>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Cfg_2_Win32)'!=''">
|
||||
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
|
||||
<VerInfo_Locale>1033</VerInfo_Locale>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<DelphiCompile Include="$(MainSource)">
|
||||
<MainSource>MainSource</MainSource>
|
||||
</DelphiCompile>
|
||||
<DCCReference Include="rtl.dcp"/>
|
||||
<DCCReference Include="designide.dcp"/>
|
||||
<DCCReference Include="ExpertsCreators.dcp"/>
|
||||
<DCCReference Include="IndySystem.dcp"/>
|
||||
<DCCReference Include="IndyProtocols.dcp"/>
|
||||
<DCCReference Include="IndyCore.dcp"/>
|
||||
<DCCReference Include="dbrtl.dcp"/>
|
||||
<DCCReference Include="dmvcframeworkRT.dcp"/>
|
||||
<DCCReference Include="..\..\ideexpert\DMVC.Expert.CodeGen.NewControllerUnit.pas"/>
|
||||
<DCCReference Include="..\..\ideexpert\DMVC.Expert.CodeGen.NewDMVCProject.pas"/>
|
||||
<DCCReference Include="..\..\ideexpert\DMVC.Expert.CodeGen.NewProject.pas"/>
|
||||
<DCCReference Include="..\..\ideexpert\DMVC.Expert.CodeGen.NewUnit.pas"/>
|
||||
<DCCReference Include="..\..\ideexpert\DMVC.Expert.CodeGen.NewWebModuleUnit.pas"/>
|
||||
<DCCReference Include="..\..\ideexpert\DMVC.Expert.CodeGen.SourceFile.pas"/>
|
||||
<DCCReference Include="..\..\ideexpert\DMVC.Expert.CodeGen.Templates.pas"/>
|
||||
<DCCReference Include="..\..\ideexpert\DMVC.Expert.Forms.NewProjectWizard.pas">
|
||||
<Form>frmDMVCNewProject</Form>
|
||||
</DCCReference>
|
||||
<DCCReference Include="..\..\ideexpert\DMVC.Expert.Forms.NewUnitWizard.pas">
|
||||
<Form>frmDMVCNewUnit</Form>
|
||||
</DCCReference>
|
||||
<DCCReference Include="..\..\ideexpert\DMVC.Expert.NewUnitWizardEx.pas"/>
|
||||
<DCCReference Include="..\..\ideexpert\DMVC.Expert.ProjectWizardEx.pas"/>
|
||||
<DCCReference Include="..\..\ideexpert\DMVC.Expert.Registration.pas"/>
|
||||
<DCCReference Include="..\..\ideexpert\DMVC.Splash.Registration.pas"/>
|
||||
<RcItem Include="..\..\ideexpert\DMVC.Expert.NewProject.ico">
|
||||
<ResourceType>ICON</ResourceType>
|
||||
<ResourceId>DMVCNewProjectIcon</ResourceId>
|
||||
</RcItem>
|
||||
<RcItem Include="..\..\ideexpert\DMVC.Expert.NewUnit.ico">
|
||||
<ResourceType>ICON</ResourceType>
|
||||
<ResourceId>DMVCNewUnitIcon</ResourceId>
|
||||
</RcItem>
|
||||
<RcItem Include="..\..\ideexpert\SplashScreen.bmp">
|
||||
<ResourceType>BITMAP</ResourceType>
|
||||
<ResourceId>SplashScreen</ResourceId>
|
||||
</RcItem>
|
||||
<BuildConfiguration Include="Release">
|
||||
<Key>Cfg_2</Key>
|
||||
<CfgParent>Base</CfgParent>
|
||||
</BuildConfiguration>
|
||||
<BuildConfiguration Include="Base">
|
||||
<Key>Base</Key>
|
||||
</BuildConfiguration>
|
||||
<BuildConfiguration Include="Debug">
|
||||
<Key>Cfg_1</Key>
|
||||
<CfgParent>Base</CfgParent>
|
||||
</BuildConfiguration>
|
||||
</ItemGroup>
|
||||
<ProjectExtensions>
|
||||
<Borland.Personality>Delphi.Personality.12</Borland.Personality>
|
||||
<Borland.ProjectType>Package</Borland.ProjectType>
|
||||
<BorlandProject>
|
||||
<Delphi.Personality>
|
||||
<Source>
|
||||
<Source Name="MainSource">dmvcframeworkDT.dpk</Source>
|
||||
</Source>
|
||||
<Excluded_Packages>
|
||||
<Excluded_Packages Name="$(BDSBIN)\bcboffice2k260.bpl">Embarcadero C++Builder Office 2000 Servers Package</Excluded_Packages>
|
||||
<Excluded_Packages Name="$(BDSBIN)\bcbofficexp260.bpl">Embarcadero C++Builder Office XP Servers Package</Excluded_Packages>
|
||||
<Excluded_Packages Name="$(BDSBIN)\dcloffice2k260.bpl">Microsoft Office 2000 Sample Automation Server Wrapper Components</Excluded_Packages>
|
||||
<Excluded_Packages Name="$(BDSBIN)\dclofficexp260.bpl">Microsoft Office XP Sample Automation Server Wrapper Components</Excluded_Packages>
|
||||
</Excluded_Packages>
|
||||
</Delphi.Personality>
|
||||
<Deployment Version="3">
|
||||
<DeployFile LocalName="$(BDS)\Redist\osx32\libcgunwind.1.0.dylib" Class="DependencyModule">
|
||||
<Platform Name="OSX32">
|
||||
<Overwrite>true</Overwrite>
|
||||
</Platform>
|
||||
</DeployFile>
|
||||
<DeployFile LocalName="$(BDS)\Redist\osx64\libcgsqlite3.dylib" Class="DependencyModule">
|
||||
<Platform Name="OSX64">
|
||||
<Overwrite>true</Overwrite>
|
||||
</Platform>
|
||||
</DeployFile>
|
||||
<DeployFile LocalName="$(BDS)\Redist\iossimulator\libPCRE.dylib" Class="DependencyModule">
|
||||
<Platform Name="iOSSimulator">
|
||||
<Overwrite>true</Overwrite>
|
||||
</Platform>
|
||||
</DeployFile>
|
||||
<DeployFile LocalName="$(BDS)\Redist\iossimulator\libcgunwind.1.0.dylib" Class="DependencyModule">
|
||||
<Platform Name="iOSSimulator">
|
||||
<Overwrite>true</Overwrite>
|
||||
</Platform>
|
||||
</DeployFile>
|
||||
<DeployFile LocalName="$(BDS)\Redist\iossimulator\libpcre.dylib" Class="DependencyModule">
|
||||
<Platform Name="iOSSimulator">
|
||||
<Overwrite>true</Overwrite>
|
||||
</Platform>
|
||||
</DeployFile>
|
||||
<DeployFile LocalName="$(BDS)\Redist\osx32\libcgsqlite3.dylib" Class="DependencyModule">
|
||||
<Platform Name="OSX32">
|
||||
<Overwrite>true</Overwrite>
|
||||
</Platform>
|
||||
</DeployFile>
|
||||
<DeployFile LocalName="C:\Users\Public\Documents\Embarcadero\Studio\20.0\Bpl\dmvcframeworkDT100.bpl" Configuration="Debug" Class="ProjectOutput">
|
||||
<Platform Name="Win32">
|
||||
<RemoteName>dmvcframeworkDT.bpl</RemoteName>
|
||||
<Overwrite>true</Overwrite>
|
||||
</Platform>
|
||||
</DeployFile>
|
||||
<DeployClass Name="AdditionalDebugSymbols">
|
||||
<Platform Name="OSX32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Win32">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="AndroidClassesDexFile">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>classes</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="AndroidFileProvider">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\xml</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="AndroidGDBServer">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="AndroidLibnativeArmeabiFile">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>library\lib\armeabi</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="AndroidLibnativeMipsFile">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>library\lib\mips</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="AndroidServiceOutput">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="AndroidSplashImageDef">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="AndroidSplashStyles">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\values</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="AndroidSplashStylesV21">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\values-v21</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_DefaultAppIcon">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_LauncherIcon144">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable-xxhdpi</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_LauncherIcon36">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable-ldpi</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_LauncherIcon48">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable-mdpi</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_LauncherIcon72">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable-hdpi</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_LauncherIcon96">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable-xhdpi</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_SplashImage426">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable-small</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_SplashImage470">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable-normal</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_SplashImage640">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable-large</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_SplashImage960">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable-xlarge</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="DebugSymbols">
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="OSX32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Win32">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="DependencyFramework">
|
||||
<Platform Name="OSX32">
|
||||
<Operation>1</Operation>
|
||||
<Extensions>.framework</Extensions>
|
||||
</Platform>
|
||||
<Platform Name="OSX64">
|
||||
<Operation>1</Operation>
|
||||
<Extensions>.framework</Extensions>
|
||||
</Platform>
|
||||
<Platform Name="Win32">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="DependencyModule">
|
||||
<Platform Name="OSX32">
|
||||
<Operation>1</Operation>
|
||||
<Extensions>.dylib</Extensions>
|
||||
</Platform>
|
||||
<Platform Name="OSX64">
|
||||
<Operation>1</Operation>
|
||||
<Extensions>.dylib</Extensions>
|
||||
</Platform>
|
||||
<Platform Name="Win32">
|
||||
<Operation>0</Operation>
|
||||
<Extensions>.dll;.bpl</Extensions>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Required="true" Name="DependencyPackage">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
<Extensions>.dylib</Extensions>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
<Extensions>.dylib</Extensions>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
<Extensions>.dylib</Extensions>
|
||||
</Platform>
|
||||
<Platform Name="OSX32">
|
||||
<Operation>1</Operation>
|
||||
<Extensions>.dylib</Extensions>
|
||||
</Platform>
|
||||
<Platform Name="OSX64">
|
||||
<Operation>1</Operation>
|
||||
<Extensions>.dylib</Extensions>
|
||||
</Platform>
|
||||
<Platform Name="Win32">
|
||||
<Operation>0</Operation>
|
||||
<Extensions>.bpl</Extensions>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="File">
|
||||
<Platform Name="Android">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
<Platform Name="OSX32">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
<Platform Name="OSX64">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Win32">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="iPad_Launch1024">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="iPad_Launch1536">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="iPad_Launch2048">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="iPad_Launch768">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="iPhone_Launch320">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="iPhone_Launch640">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="iPhone_Launch640x1136">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="ProjectAndroidManifest">
|
||||
<Platform Name="Android">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="ProjectiOSDeviceDebug">
|
||||
<Platform Name="iOSDevice32">
|
||||
<RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="ProjectiOSDeviceResourceRules"/>
|
||||
<DeployClass Name="ProjectiOSEntitlements"/>
|
||||
<DeployClass Name="ProjectiOSInfoPList"/>
|
||||
<DeployClass Name="ProjectiOSResource">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="ProjectOSXDebug"/>
|
||||
<DeployClass Name="ProjectOSXEntitlements"/>
|
||||
<DeployClass Name="ProjectOSXInfoPList"/>
|
||||
<DeployClass Name="ProjectOSXResource">
|
||||
<Platform Name="OSX32">
|
||||
<RemoteDir>Contents\Resources</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="OSX64">
|
||||
<RemoteDir>Contents\Resources</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Required="true" Name="ProjectOutput">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Linux64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="OSX32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="OSX64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Win32">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="ProjectUWPManifest">
|
||||
<Platform Name="Win32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Win64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="UWP_DelphiLogo150">
|
||||
<Platform Name="Win32">
|
||||
<RemoteDir>Assets</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Win64">
|
||||
<RemoteDir>Assets</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="UWP_DelphiLogo44">
|
||||
<Platform Name="Win32">
|
||||
<RemoteDir>Assets</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Win64">
|
||||
<RemoteDir>Assets</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<ProjectRoot Platform="iOSDevice64" Name="$(PROJECTNAME).app"/>
|
||||
<ProjectRoot Platform="Win64" Name="$(PROJECTNAME)"/>
|
||||
<ProjectRoot Platform="iOSDevice32" Name="$(PROJECTNAME).app"/>
|
||||
<ProjectRoot Platform="Linux64" Name="$(PROJECTNAME)"/>
|
||||
<ProjectRoot Platform="Win32" Name="$(PROJECTNAME)"/>
|
||||
<ProjectRoot Platform="OSX32" Name="$(PROJECTNAME)"/>
|
||||
<ProjectRoot Platform="Android" Name="$(PROJECTNAME)"/>
|
||||
<ProjectRoot Platform="OSX64" Name="$(PROJECTNAME)"/>
|
||||
<ProjectRoot Platform="iOSSimulator" Name="$(PROJECTNAME).app"/>
|
||||
</Deployment>
|
||||
<Platforms>
|
||||
<Platform value="Android">False</Platform>
|
||||
<Platform value="Linux64">False</Platform>
|
||||
<Platform value="Win32">True</Platform>
|
||||
<Platform value="Win64">False</Platform>
|
||||
</Platforms>
|
||||
</BorlandProject>
|
||||
<ProjectFileVersion>12</ProjectFileVersion>
|
||||
</ProjectExtensions>
|
||||
<Import Project="$(BDS)\Bin\CodeGear.Delphi.Targets" Condition="Exists('$(BDS)\Bin\CodeGear.Delphi.Targets')"/>
|
||||
<Import Project="$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj" Condition="Exists('$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj')"/>
|
||||
<Import Project="$(MSBuildProjectName).deployproj" Condition="Exists('$(MSBuildProjectName).deployproj')"/>
|
||||
</Project>
|
3
packages/dxe7/dmvcframeworkDTResource.rc
Normal file
3
packages/dxe7/dmvcframeworkDTResource.rc
Normal file
@ -0,0 +1,3 @@
|
||||
DMVCNewProjectIcon ICON "..\\..\\ideexpert\\DMVC.Expert.NewProject.ico"
|
||||
DMVCNewUnitIcon ICON "..\\..\\ideexpert\\DMVC.Expert.NewUnit.ico"
|
||||
SplashScreen BITMAP "..\\..\\ideexpert\\SplashScreen.bmp"
|
99
packages/dxe7/dmvcframeworkRT.dpk
Normal file
99
packages/dxe7/dmvcframeworkRT.dpk
Normal file
@ -0,0 +1,99 @@
|
||||
package dmvcframeworkRT;
|
||||
|
||||
{$R *.res}
|
||||
{$IFDEF IMPLICITBUILDING This IFDEF should not be used by users}
|
||||
{$ALIGN 8}
|
||||
{$ASSERTIONS ON}
|
||||
{$BOOLEVAL OFF}
|
||||
{$DEBUGINFO OFF}
|
||||
{$EXTENDEDSYNTAX ON}
|
||||
{$IMPORTEDDATA ON}
|
||||
{$IOCHECKS ON}
|
||||
{$LOCALSYMBOLS ON}
|
||||
{$LONGSTRINGS ON}
|
||||
{$OPENSTRINGS ON}
|
||||
{$OPTIMIZATION OFF}
|
||||
{$OVERFLOWCHECKS OFF}
|
||||
{$RANGECHECKS OFF}
|
||||
{$REFERENCEINFO ON}
|
||||
{$SAFEDIVIDE OFF}
|
||||
{$STACKFRAMES ON}
|
||||
{$TYPEDADDRESS OFF}
|
||||
{$VARSTRINGCHECKS ON}
|
||||
{$WRITEABLECONST OFF}
|
||||
{$MINENUMSIZE 1}
|
||||
{$IMAGEBASE $400000}
|
||||
{$DEFINE DEBUG}
|
||||
{$ENDIF IMPLICITBUILDING}
|
||||
{$DESCRIPTION 'DMVCFramework 3.x'}
|
||||
{$LIBSUFFIX 'xe7'}
|
||||
{$RUNONLY}
|
||||
{$IMPLICITBUILD ON}
|
||||
|
||||
requires
|
||||
rtl,
|
||||
inet,
|
||||
dclcommon,
|
||||
dcldb,
|
||||
FireDAC,
|
||||
IndyCore,
|
||||
IndyProtocols,
|
||||
FireDACIBDriver,
|
||||
FireDACMySQLDriver,
|
||||
loggerproRT;
|
||||
|
||||
contains
|
||||
Web.ApacheConst,
|
||||
Web.Win.IsapiHTTP,
|
||||
Web.ApacheHTTP,
|
||||
Web.HTTPDMethods,
|
||||
Web.HTTPDImpl,
|
||||
JsonDataObjects in '..\..\sources\JsonDataObjects.pas',
|
||||
MVCFramework.ActiveRecord in '..\..\sources\MVCFramework.ActiveRecord.pas',
|
||||
MVCFramework.ActiveRecordController in '..\..\sources\MVCFramework.ActiveRecordController.pas',
|
||||
MVCFramework.ApplicationSession in '..\..\sources\MVCFramework.ApplicationSession.pas',
|
||||
MVCFramework.Cache in '..\..\sources\MVCFramework.Cache.pas',
|
||||
MVCFramework.Commons in '..\..\sources\MVCFramework.Commons.pas',
|
||||
MVCFramework.Console in '..\..\sources\MVCFramework.Console.pas',
|
||||
MVCFramework.DataSet.Utils in '..\..\sources\MVCFramework.DataSet.Utils.pas',
|
||||
MVCFramework.DuckTyping in '..\..\sources\MVCFramework.DuckTyping.pas',
|
||||
MVCFramework.FireDAC.Utils in '..\..\sources\MVCFramework.FireDAC.Utils.pas',
|
||||
MVCFramework.HMAC in '..\..\sources\MVCFramework.HMAC.pas',
|
||||
MVCFramework.JSONRPC.Client in '..\..\sources\MVCFramework.JSONRPC.Client.pas',
|
||||
MVCFramework.JSONRPC in '..\..\sources\MVCFramework.JSONRPC.pas',
|
||||
MVCFramework.JWT in '..\..\sources\MVCFramework.JWT.pas',
|
||||
MVCFramework.Logger in '..\..\sources\MVCFramework.Logger.pas',
|
||||
MVCFramework.Middleware.Analytics in '..\..\sources\MVCFramework.Middleware.Analytics.pas',
|
||||
MVCFramework.Middleware.Authentication in '..\..\sources\MVCFramework.Middleware.Authentication.pas',
|
||||
MVCFramework.Middleware.Authentication.RoleBasedAuthHandler in '..\..\sources\MVCFramework.Middleware.Authentication.RoleBasedAuthHandler.pas',
|
||||
MVCFramework.Middleware.Compression in '..\..\sources\MVCFramework.Middleware.Compression.pas',
|
||||
MVCFramework.Middleware.CORS in '..\..\sources\MVCFramework.Middleware.CORS.pas',
|
||||
MVCFramework.Middleware.JWT in '..\..\sources\MVCFramework.Middleware.JWT.pas',
|
||||
MVCFramework.Middleware.SecurityHeaders in '..\..\sources\MVCFramework.Middleware.SecurityHeaders.pas',
|
||||
MVCFramework.MultiMap in '..\..\sources\MVCFramework.MultiMap.pas',
|
||||
MVCFramework in '..\..\sources\MVCFramework.pas',
|
||||
MVCFramework.Patches in '..\..\sources\MVCFramework.Patches.pas',
|
||||
MVCFramework.RESTAdapter in '..\..\sources\MVCFramework.RESTAdapter.pas',
|
||||
MVCFramework.RESTClient in '..\..\sources\MVCFramework.RESTClient.pas',
|
||||
MVCFramework.Router in '..\..\sources\MVCFramework.Router.pas',
|
||||
MVCFramework.RQL.AST2FirebirdSQL in '..\..\sources\MVCFramework.RQL.AST2FirebirdSQL.pas',
|
||||
MVCFramework.RQL.AST2InterbaseSQL in '..\..\sources\MVCFramework.RQL.AST2InterbaseSQL.pas',
|
||||
MVCFramework.RQL.AST2MySQL in '..\..\sources\MVCFramework.RQL.AST2MySQL.pas',
|
||||
MVCFramework.RQL.AST2PostgreSQL in '..\..\sources\MVCFramework.RQL.AST2PostgreSQL.pas',
|
||||
MVCFramework.RQL.Parser in '..\..\sources\MVCFramework.RQL.Parser.pas',
|
||||
MVCFramework.Rtti.Utils in '..\..\sources\MVCFramework.Rtti.Utils.pas',
|
||||
MVCFramework.Serializer.Abstract in '..\..\sources\MVCFramework.Serializer.Abstract.pas',
|
||||
MVCFramework.Serializer.Commons in '..\..\sources\MVCFramework.Serializer.Commons.pas',
|
||||
MVCFramework.Serializer.Defaults in '..\..\sources\MVCFramework.Serializer.Defaults.pas',
|
||||
MVCFramework.Serializer.Intf in '..\..\sources\MVCFramework.Serializer.Intf.pas',
|
||||
MVCFramework.Serializer.JsonDataObjects.CustomTypes in '..\..\sources\MVCFramework.Serializer.JsonDataObjects.CustomTypes.pas',
|
||||
MVCFramework.Serializer.JsonDataObjects in '..\..\sources\MVCFramework.Serializer.JsonDataObjects.pas',
|
||||
MVCFramework.Session in '..\..\sources\MVCFramework.Session.pas',
|
||||
MVCFramework.SQLGenerators.Firebird in '..\..\sources\MVCFramework.SQLGenerators.Firebird.pas',
|
||||
MVCFramework.SQLGenerators.MySQL in '..\..\sources\MVCFramework.SQLGenerators.MySQL.pas',
|
||||
MVCFramework.SysControllers in '..\..\sources\MVCFramework.SysControllers.pas',
|
||||
MVCFramework.SystemJSONUtils in '..\..\sources\MVCFramework.SystemJSONUtils.pas',
|
||||
MVCFramework.View.Cache in '..\..\sources\MVCFramework.View.Cache.pas';
|
||||
|
||||
end.
|
||||
|
619
packages/dxe7/dmvcframeworkRT.dproj
Normal file
619
packages/dxe7/dmvcframeworkRT.dproj
Normal file
@ -0,0 +1,619 @@
|
||||
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<ProjectGuid>{96D17257-AF74-48CB-9893-7BCCB56A069D}</ProjectGuid>
|
||||
<MainSource>dmvcframeworkRT.dpk</MainSource>
|
||||
<ProjectVersion>18.6</ProjectVersion>
|
||||
<FrameworkType>None</FrameworkType>
|
||||
<Base>True</Base>
|
||||
<Config Condition="'$(Config)'==''">Debug</Config>
|
||||
<Platform Condition="'$(Platform)'==''">Win32</Platform>
|
||||
<TargetedPlatforms>1</TargetedPlatforms>
|
||||
<AppType>Package</AppType>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''">
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="('$(Platform)'=='Android' and '$(Base)'=='true') or '$(Base_Android)'!=''">
|
||||
<Base_Android>true</Base_Android>
|
||||
<CfgParent>Base</CfgParent>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Base)'=='true') or '$(Base_Win32)'!=''">
|
||||
<Base_Win32>true</Base_Win32>
|
||||
<CfgParent>Base</CfgParent>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Config)'=='Debug' or '$(Cfg_1)'!=''">
|
||||
<Cfg_1>true</Cfg_1>
|
||||
<CfgParent>Base</CfgParent>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Cfg_1)'=='true') or '$(Cfg_1_Win32)'!=''">
|
||||
<Cfg_1_Win32>true</Cfg_1_Win32>
|
||||
<CfgParent>Cfg_1</CfgParent>
|
||||
<Cfg_1>true</Cfg_1>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Config)'=='Release' or '$(Cfg_2)'!=''">
|
||||
<Cfg_2>true</Cfg_2>
|
||||
<CfgParent>Base</CfgParent>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Base)'!=''">
|
||||
<DCC_DcuOutput>.\$(Platform)\$(Config)</DCC_DcuOutput>
|
||||
<DCC_ExeOutput>.\$(Platform)\$(Config)</DCC_ExeOutput>
|
||||
<DCC_E>false</DCC_E>
|
||||
<DCC_N>false</DCC_N>
|
||||
<DCC_S>false</DCC_S>
|
||||
<DCC_F>false</DCC_F>
|
||||
<DCC_K>false</DCC_K>
|
||||
<GenDll>true</GenDll>
|
||||
<GenPackage>true</GenPackage>
|
||||
<DCC_Namespace>System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace)</DCC_Namespace>
|
||||
<DCC_CBuilderOutput>All</DCC_CBuilderOutput>
|
||||
<SanitizedProjectName>dmvcframeworkRT</SanitizedProjectName>
|
||||
<RuntimeOnlyPackage>true</RuntimeOnlyPackage>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Base_Android)'!=''">
|
||||
<DCC_CBuilderOutput>None</DCC_CBuilderOutput>
|
||||
<EnabledSysJars>android-support-v4.dex.jar;cloud-messaging.dex.jar;fmx.dex.jar;google-analytics-v2.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar;google-play-services-ads-7.0.0.dex.jar;google-play-services-analytics-7.0.0.dex.jar;google-play-services-base-7.0.0.dex.jar;google-play-services-gcm-7.0.0.dex.jar;google-play-services-identity-7.0.0.dex.jar;google-play-services-maps-7.0.0.dex.jar;google-play-services-panorama-7.0.0.dex.jar;google-play-services-plus-7.0.0.dex.jar;google-play-services-wallet-7.0.0.dex.jar</EnabledSysJars>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Base_Win32)'!=''">
|
||||
<DCC_Namespace>Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)</DCC_Namespace>
|
||||
<BT_BuildType>Debug</BT_BuildType>
|
||||
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
|
||||
<VerInfo_Keys>CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=</VerInfo_Keys>
|
||||
<VerInfo_Locale>1033</VerInfo_Locale>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Cfg_1)'!=''">
|
||||
<DCC_Define>DEBUG;$(DCC_Define)</DCC_Define>
|
||||
<DCC_DebugDCUs>true</DCC_DebugDCUs>
|
||||
<DCC_Optimize>false</DCC_Optimize>
|
||||
<DCC_GenerateStackFrames>true</DCC_GenerateStackFrames>
|
||||
<DCC_DebugInfoInExe>true</DCC_DebugInfoInExe>
|
||||
<DCC_RemoteDebug>true</DCC_RemoteDebug>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Cfg_1_Win32)'!=''">
|
||||
<Debugger_HostApplication>C:\DEV\dmscontainer_centrosoftware\bin\DMSContainerService.exe</Debugger_HostApplication>
|
||||
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
|
||||
<VerInfo_Locale>1033</VerInfo_Locale>
|
||||
<DCC_MapFile>3</DCC_MapFile>
|
||||
<DCC_Description>DMVCFramework 3.x</DCC_Description>
|
||||
<DllSuffix>xe7</DllSuffix>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Cfg_2)'!=''">
|
||||
<DCC_LocalDebugSymbols>false</DCC_LocalDebugSymbols>
|
||||
<DCC_Define>RELEASE;$(DCC_Define)</DCC_Define>
|
||||
<DCC_SymbolReferenceInfo>0</DCC_SymbolReferenceInfo>
|
||||
<DCC_DebugInformation>0</DCC_DebugInformation>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<DelphiCompile Include="$(MainSource)">
|
||||
<MainSource>MainSource</MainSource>
|
||||
</DelphiCompile>
|
||||
<DCCReference Include="rtl.dcp"/>
|
||||
<DCCReference Include="inet.dcp"/>
|
||||
<DCCReference Include="dclcommon.dcp"/>
|
||||
<DCCReference Include="dcldb.dcp"/>
|
||||
<DCCReference Include="FireDAC.dcp"/>
|
||||
<DCCReference Include="IndyCore.dcp"/>
|
||||
<DCCReference Include="IndyProtocols.dcp"/>
|
||||
<DCCReference Include="FireDACIBDriver.dcp"/>
|
||||
<DCCReference Include="FireDACMySQLDriver.dcp"/>
|
||||
<DCCReference Include="loggerproRT.dcp"/>
|
||||
<DCCReference Include="..\..\sources\JsonDataObjects.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.ActiveRecord.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.ActiveRecordController.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.ApplicationSession.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.Cache.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.Commons.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.Console.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.DataSet.Utils.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.DuckTyping.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.FireDAC.Utils.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.HMAC.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.JSONRPC.Client.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.JSONRPC.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.JWT.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.Logger.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.Middleware.Analytics.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.Middleware.Authentication.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.Middleware.Authentication.RoleBasedAuthHandler.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.Middleware.Compression.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.Middleware.CORS.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.Middleware.JWT.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.Middleware.SecurityHeaders.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.MultiMap.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.Patches.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.RESTAdapter.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.RESTClient.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.Router.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.RQL.AST2FirebirdSQL.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.RQL.AST2InterbaseSQL.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.RQL.AST2MySQL.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.RQL.AST2PostgreSQL.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.RQL.Parser.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.Rtti.Utils.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.Serializer.Abstract.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.Serializer.Commons.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.Serializer.Defaults.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.Serializer.Intf.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.Serializer.JsonDataObjects.CustomTypes.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.Serializer.JsonDataObjects.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.Session.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.SQLGenerators.Firebird.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.SQLGenerators.MySQL.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.SysControllers.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.SystemJSONUtils.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.View.Cache.pas"/>
|
||||
<BuildConfiguration Include="Release">
|
||||
<Key>Cfg_2</Key>
|
||||
<CfgParent>Base</CfgParent>
|
||||
</BuildConfiguration>
|
||||
<BuildConfiguration Include="Base">
|
||||
<Key>Base</Key>
|
||||
</BuildConfiguration>
|
||||
<BuildConfiguration Include="Debug">
|
||||
<Key>Cfg_1</Key>
|
||||
<CfgParent>Base</CfgParent>
|
||||
</BuildConfiguration>
|
||||
</ItemGroup>
|
||||
<ProjectExtensions>
|
||||
<Borland.Personality>Delphi.Personality.12</Borland.Personality>
|
||||
<Borland.ProjectType>Package</Borland.ProjectType>
|
||||
<BorlandProject>
|
||||
<Delphi.Personality>
|
||||
<Source>
|
||||
<Source Name="MainSource">dmvcframeworkRT.dpk</Source>
|
||||
</Source>
|
||||
<Excluded_Packages>
|
||||
<Excluded_Packages Name="$(BDSBIN)\bcboffice2k260.bpl">Embarcadero C++Builder Office 2000 Servers Package</Excluded_Packages>
|
||||
<Excluded_Packages Name="$(BDSBIN)\bcbofficexp260.bpl">Embarcadero C++Builder Office XP Servers Package</Excluded_Packages>
|
||||
<Excluded_Packages Name="$(BDSBIN)\dcloffice2k260.bpl">Microsoft Office 2000 Sample Automation Server Wrapper Components</Excluded_Packages>
|
||||
<Excluded_Packages Name="$(BDSBIN)\dclofficexp260.bpl">Microsoft Office XP Sample Automation Server Wrapper Components</Excluded_Packages>
|
||||
</Excluded_Packages>
|
||||
</Delphi.Personality>
|
||||
<Deployment Version="3">
|
||||
<DeployFile LocalName="$(BDS)\Redist\osx32\libcgunwind.1.0.dylib" Class="DependencyModule">
|
||||
<Platform Name="OSX32">
|
||||
<Overwrite>true</Overwrite>
|
||||
</Platform>
|
||||
</DeployFile>
|
||||
<DeployFile LocalName="$(BDS)\Redist\osx64\libcgsqlite3.dylib" Class="DependencyModule">
|
||||
<Platform Name="OSX64">
|
||||
<Overwrite>true</Overwrite>
|
||||
</Platform>
|
||||
</DeployFile>
|
||||
<DeployFile LocalName="$(BDS)\Redist\iossimulator\libPCRE.dylib" Class="DependencyModule">
|
||||
<Platform Name="iOSSimulator">
|
||||
<Overwrite>true</Overwrite>
|
||||
</Platform>
|
||||
</DeployFile>
|
||||
<DeployFile LocalName="$(BDS)\Redist\iossimulator\libcgunwind.1.0.dylib" Class="DependencyModule">
|
||||
<Platform Name="iOSSimulator">
|
||||
<Overwrite>true</Overwrite>
|
||||
</Platform>
|
||||
</DeployFile>
|
||||
<DeployFile LocalName="$(BDS)\Redist\iossimulator\libpcre.dylib" Class="DependencyModule">
|
||||
<Platform Name="iOSSimulator">
|
||||
<Overwrite>true</Overwrite>
|
||||
</Platform>
|
||||
</DeployFile>
|
||||
<DeployFile LocalName="$(BDS)\Redist\osx32\libcgsqlite3.dylib" Class="DependencyModule">
|
||||
<Platform Name="OSX32">
|
||||
<Overwrite>true</Overwrite>
|
||||
</Platform>
|
||||
</DeployFile>
|
||||
<DeployFile LocalName="C:\Users\Public\Documents\Embarcadero\Studio\20.0\Bpl\dmvcframeworkRT100.bpl" Configuration="Debug" Class="ProjectOutput">
|
||||
<Platform Name="Win32">
|
||||
<RemoteName>dmvcframeworkRT.bpl</RemoteName>
|
||||
<Overwrite>true</Overwrite>
|
||||
</Platform>
|
||||
</DeployFile>
|
||||
<DeployClass Name="AdditionalDebugSymbols">
|
||||
<Platform Name="OSX32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Win32">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="AndroidClassesDexFile">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>classes</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="AndroidFileProvider">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\xml</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="AndroidGDBServer">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="AndroidLibnativeArmeabiFile">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>library\lib\armeabi</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="AndroidLibnativeMipsFile">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>library\lib\mips</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="AndroidServiceOutput">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="AndroidSplashImageDef">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="AndroidSplashStyles">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\values</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="AndroidSplashStylesV21">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\values-v21</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_DefaultAppIcon">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_LauncherIcon144">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable-xxhdpi</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_LauncherIcon36">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable-ldpi</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_LauncherIcon48">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable-mdpi</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_LauncherIcon72">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable-hdpi</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_LauncherIcon96">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable-xhdpi</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_SplashImage426">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable-small</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_SplashImage470">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable-normal</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_SplashImage640">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable-large</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_SplashImage960">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable-xlarge</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="DebugSymbols">
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="OSX32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Win32">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="DependencyFramework">
|
||||
<Platform Name="OSX32">
|
||||
<Operation>1</Operation>
|
||||
<Extensions>.framework</Extensions>
|
||||
</Platform>
|
||||
<Platform Name="OSX64">
|
||||
<Operation>1</Operation>
|
||||
<Extensions>.framework</Extensions>
|
||||
</Platform>
|
||||
<Platform Name="Win32">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="DependencyModule">
|
||||
<Platform Name="OSX32">
|
||||
<Operation>1</Operation>
|
||||
<Extensions>.dylib</Extensions>
|
||||
</Platform>
|
||||
<Platform Name="OSX64">
|
||||
<Operation>1</Operation>
|
||||
<Extensions>.dylib</Extensions>
|
||||
</Platform>
|
||||
<Platform Name="Win32">
|
||||
<Operation>0</Operation>
|
||||
<Extensions>.dll;.bpl</Extensions>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Required="true" Name="DependencyPackage">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
<Extensions>.dylib</Extensions>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
<Extensions>.dylib</Extensions>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
<Extensions>.dylib</Extensions>
|
||||
</Platform>
|
||||
<Platform Name="OSX32">
|
||||
<Operation>1</Operation>
|
||||
<Extensions>.dylib</Extensions>
|
||||
</Platform>
|
||||
<Platform Name="OSX64">
|
||||
<Operation>1</Operation>
|
||||
<Extensions>.dylib</Extensions>
|
||||
</Platform>
|
||||
<Platform Name="Win32">
|
||||
<Operation>0</Operation>
|
||||
<Extensions>.bpl</Extensions>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="File">
|
||||
<Platform Name="Android">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
<Platform Name="OSX32">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
<Platform Name="OSX64">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Win32">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="iPad_Launch1024">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="iPad_Launch1536">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="iPad_Launch2048">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="iPad_Launch768">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="iPhone_Launch320">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="iPhone_Launch640">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="iPhone_Launch640x1136">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="ProjectAndroidManifest">
|
||||
<Platform Name="Android">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="ProjectiOSDeviceDebug">
|
||||
<Platform Name="iOSDevice32">
|
||||
<RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="ProjectiOSDeviceResourceRules"/>
|
||||
<DeployClass Name="ProjectiOSEntitlements"/>
|
||||
<DeployClass Name="ProjectiOSInfoPList"/>
|
||||
<DeployClass Name="ProjectiOSResource">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="ProjectOSXDebug"/>
|
||||
<DeployClass Name="ProjectOSXEntitlements"/>
|
||||
<DeployClass Name="ProjectOSXInfoPList"/>
|
||||
<DeployClass Name="ProjectOSXResource">
|
||||
<Platform Name="OSX32">
|
||||
<RemoteDir>Contents\Resources</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="OSX64">
|
||||
<RemoteDir>Contents\Resources</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Required="true" Name="ProjectOutput">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Linux64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="OSX32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="OSX64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Win32">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="ProjectUWPManifest">
|
||||
<Platform Name="Win32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Win64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="UWP_DelphiLogo150">
|
||||
<Platform Name="Win32">
|
||||
<RemoteDir>Assets</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Win64">
|
||||
<RemoteDir>Assets</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="UWP_DelphiLogo44">
|
||||
<Platform Name="Win32">
|
||||
<RemoteDir>Assets</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Win64">
|
||||
<RemoteDir>Assets</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<ProjectRoot Platform="iOSDevice64" Name="$(PROJECTNAME).app"/>
|
||||
<ProjectRoot Platform="Win64" Name="$(PROJECTNAME)"/>
|
||||
<ProjectRoot Platform="iOSDevice32" Name="$(PROJECTNAME).app"/>
|
||||
<ProjectRoot Platform="Linux64" Name="$(PROJECTNAME)"/>
|
||||
<ProjectRoot Platform="Win32" Name="$(PROJECTNAME)"/>
|
||||
<ProjectRoot Platform="OSX32" Name="$(PROJECTNAME)"/>
|
||||
<ProjectRoot Platform="Android" Name="$(PROJECTNAME)"/>
|
||||
<ProjectRoot Platform="OSX64" Name="$(PROJECTNAME)"/>
|
||||
<ProjectRoot Platform="iOSSimulator" Name="$(PROJECTNAME).app"/>
|
||||
</Deployment>
|
||||
<Platforms>
|
||||
<Platform value="Android">False</Platform>
|
||||
<Platform value="Linux64">False</Platform>
|
||||
<Platform value="Win32">True</Platform>
|
||||
<Platform value="Win64">False</Platform>
|
||||
</Platforms>
|
||||
</BorlandProject>
|
||||
<ProjectFileVersion>12</ProjectFileVersion>
|
||||
</ProjectExtensions>
|
||||
<Import Project="$(BDS)\Bin\CodeGear.Delphi.Targets" Condition="Exists('$(BDS)\Bin\CodeGear.Delphi.Targets')"/>
|
||||
<Import Project="$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj" Condition="Exists('$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj')"/>
|
||||
<Import Project="$(MSBuildProjectName).deployproj" Condition="Exists('$(MSBuildProjectName).deployproj')"/>
|
||||
</Project>
|
60
packages/dxe7/dmvcframework_group.groupproj
Normal file
60
packages/dxe7/dmvcframework_group.groupproj
Normal file
@ -0,0 +1,60 @@
|
||||
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<ProjectGuid>{EA879EE4-1245-4456-AED9-57FDF63577E5}</ProjectGuid>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Projects Include="..\..\lib\loggerpro\packages\dxe7\loggerproRT.dproj">
|
||||
<Dependencies/>
|
||||
</Projects>
|
||||
<Projects Include="dmvcframeworkRT.dproj">
|
||||
<Dependencies>..\..\lib\loggerpro\packages\dxe7\loggerproRT.dproj</Dependencies>
|
||||
</Projects>
|
||||
<Projects Include="dmvcframeworkDT.dproj">
|
||||
<Dependencies>dmvcframeworkRT.dproj</Dependencies>
|
||||
</Projects>
|
||||
</ItemGroup>
|
||||
<ProjectExtensions>
|
||||
<Borland.Personality>Default.Personality.12</Borland.Personality>
|
||||
<Borland.ProjectType/>
|
||||
<BorlandProject>
|
||||
<Default.Personality/>
|
||||
</BorlandProject>
|
||||
</ProjectExtensions>
|
||||
<Target Name="loggerproRT">
|
||||
<MSBuild Projects="..\..\lib\loggerpro\packages\dxe7\loggerproRT.dproj"/>
|
||||
</Target>
|
||||
<Target Name="loggerproRT:Clean">
|
||||
<MSBuild Projects="..\..\lib\loggerpro\packages\dxe7\loggerproRT.dproj" Targets="Clean"/>
|
||||
</Target>
|
||||
<Target Name="loggerproRT:Make">
|
||||
<MSBuild Projects="..\..\lib\loggerpro\packages\dxe7\loggerproRT.dproj" Targets="Make"/>
|
||||
</Target>
|
||||
<Target Name="dmvcframeworkRT" DependsOnTargets="loggerproRT">
|
||||
<MSBuild Projects="dmvcframeworkRT.dproj"/>
|
||||
</Target>
|
||||
<Target Name="dmvcframeworkRT:Clean" DependsOnTargets="loggerproRT:Clean">
|
||||
<MSBuild Projects="dmvcframeworkRT.dproj" Targets="Clean"/>
|
||||
</Target>
|
||||
<Target Name="dmvcframeworkRT:Make" DependsOnTargets="loggerproRT:Make">
|
||||
<MSBuild Projects="dmvcframeworkRT.dproj" Targets="Make"/>
|
||||
</Target>
|
||||
<Target Name="dmvcframeworkDT" DependsOnTargets="dmvcframeworkRT">
|
||||
<MSBuild Projects="dmvcframeworkDT.dproj"/>
|
||||
</Target>
|
||||
<Target Name="dmvcframeworkDT:Clean" DependsOnTargets="dmvcframeworkRT:Clean">
|
||||
<MSBuild Projects="dmvcframeworkDT.dproj" Targets="Clean"/>
|
||||
</Target>
|
||||
<Target Name="dmvcframeworkDT:Make" DependsOnTargets="dmvcframeworkRT:Make">
|
||||
<MSBuild Projects="dmvcframeworkDT.dproj" Targets="Make"/>
|
||||
</Target>
|
||||
<Target Name="Build">
|
||||
<CallTarget Targets="loggerproRT;dmvcframeworkRT;dmvcframeworkDT"/>
|
||||
</Target>
|
||||
<Target Name="Clean">
|
||||
<CallTarget Targets="loggerproRT:Clean;dmvcframeworkRT:Clean;dmvcframeworkDT:Clean"/>
|
||||
</Target>
|
||||
<Target Name="Make">
|
||||
<CallTarget Targets="loggerproRT:Make;dmvcframeworkRT:Make;dmvcframeworkDT:Make"/>
|
||||
</Target>
|
||||
<Import Project="$(BDS)\Bin\CodeGear.Group.Targets" Condition="Exists('$(BDS)\Bin\CodeGear.Group.Targets')"/>
|
||||
</Project>
|
58
packages/dxe8/dmvcframeworkDT.dpk
Normal file
58
packages/dxe8/dmvcframeworkDT.dpk
Normal file
@ -0,0 +1,58 @@
|
||||
package dmvcframeworkDT;
|
||||
|
||||
{$R *.res}
|
||||
{$R *.dres}
|
||||
{$IFDEF IMPLICITBUILDING This IFDEF should not be used by users}
|
||||
{$ALIGN 8}
|
||||
{$ASSERTIONS ON}
|
||||
{$BOOLEVAL OFF}
|
||||
{$DEBUGINFO OFF}
|
||||
{$EXTENDEDSYNTAX ON}
|
||||
{$IMPORTEDDATA ON}
|
||||
{$IOCHECKS ON}
|
||||
{$LOCALSYMBOLS ON}
|
||||
{$LONGSTRINGS ON}
|
||||
{$OPENSTRINGS ON}
|
||||
{$OPTIMIZATION OFF}
|
||||
{$OVERFLOWCHECKS OFF}
|
||||
{$RANGECHECKS OFF}
|
||||
{$REFERENCEINFO ON}
|
||||
{$SAFEDIVIDE OFF}
|
||||
{$STACKFRAMES ON}
|
||||
{$TYPEDADDRESS OFF}
|
||||
{$VARSTRINGCHECKS ON}
|
||||
{$WRITEABLECONST OFF}
|
||||
{$MINENUMSIZE 1}
|
||||
{$IMAGEBASE $400000}
|
||||
{$DEFINE DEBUG}
|
||||
{$ENDIF IMPLICITBUILDING}
|
||||
{$DESCRIPTION 'DelphiMVCFramework IDE Expert'}
|
||||
{$LIBSUFFIX 'xe8'}
|
||||
{$IMPLICITBUILD ON}
|
||||
|
||||
requires
|
||||
rtl,
|
||||
designide,
|
||||
ExpertsCreators,
|
||||
IndySystem,
|
||||
IndyProtocols,
|
||||
IndyCore,
|
||||
dbrtl,
|
||||
dmvcframeworkRT;
|
||||
|
||||
contains
|
||||
DMVC.Expert.CodeGen.NewControllerUnit in '..\..\ideexpert\DMVC.Expert.CodeGen.NewControllerUnit.pas',
|
||||
DMVC.Expert.CodeGen.NewDMVCProject in '..\..\ideexpert\DMVC.Expert.CodeGen.NewDMVCProject.pas',
|
||||
DMVC.Expert.CodeGen.NewProject in '..\..\ideexpert\DMVC.Expert.CodeGen.NewProject.pas',
|
||||
DMVC.Expert.CodeGen.NewUnit in '..\..\ideexpert\DMVC.Expert.CodeGen.NewUnit.pas',
|
||||
DMVC.Expert.CodeGen.NewWebModuleUnit in '..\..\ideexpert\DMVC.Expert.CodeGen.NewWebModuleUnit.pas',
|
||||
DMVC.Expert.CodeGen.SourceFile in '..\..\ideexpert\DMVC.Expert.CodeGen.SourceFile.pas',
|
||||
DMVC.Expert.CodeGen.Templates in '..\..\ideexpert\DMVC.Expert.CodeGen.Templates.pas',
|
||||
DMVC.Expert.Forms.NewProjectWizard in '..\..\ideexpert\DMVC.Expert.Forms.NewProjectWizard.pas' {frmDMVCNewProject},
|
||||
DMVC.Expert.Forms.NewUnitWizard in '..\..\ideexpert\DMVC.Expert.Forms.NewUnitWizard.pas' {frmDMVCNewUnit},
|
||||
DMVC.Expert.NewUnitWizardEx in '..\..\ideexpert\DMVC.Expert.NewUnitWizardEx.pas',
|
||||
DMVC.Expert.ProjectWizardEx in '..\..\ideexpert\DMVC.Expert.ProjectWizardEx.pas',
|
||||
DMVC.Expert.Registration in '..\..\ideexpert\DMVC.Expert.Registration.pas',
|
||||
DMVC.Splash.Registration in '..\..\ideexpert\DMVC.Splash.Registration.pas';
|
||||
|
||||
end.
|
629
packages/dxe8/dmvcframeworkDT.dproj
Normal file
629
packages/dxe8/dmvcframeworkDT.dproj
Normal file
@ -0,0 +1,629 @@
|
||||
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<ProjectGuid>{84344511-1DC2-41BA-8689-9F36C1D475BE}</ProjectGuid>
|
||||
<MainSource>dmvcframeworkDT.dpk</MainSource>
|
||||
<ProjectVersion>18.6</ProjectVersion>
|
||||
<FrameworkType>None</FrameworkType>
|
||||
<Base>True</Base>
|
||||
<Config Condition="'$(Config)'==''">Debug</Config>
|
||||
<Platform Condition="'$(Platform)'==''">Win32</Platform>
|
||||
<TargetedPlatforms>1</TargetedPlatforms>
|
||||
<AppType>Package</AppType>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''">
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="('$(Platform)'=='Android' and '$(Base)'=='true') or '$(Base_Android)'!=''">
|
||||
<Base_Android>true</Base_Android>
|
||||
<CfgParent>Base</CfgParent>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="('$(Platform)'=='Linux64' and '$(Base)'=='true') or '$(Base_Linux64)'!=''">
|
||||
<Base_Linux64>true</Base_Linux64>
|
||||
<CfgParent>Base</CfgParent>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Base)'=='true') or '$(Base_Win32)'!=''">
|
||||
<Base_Win32>true</Base_Win32>
|
||||
<CfgParent>Base</CfgParent>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="('$(Platform)'=='Win64' and '$(Base)'=='true') or '$(Base_Win64)'!=''">
|
||||
<Base_Win64>true</Base_Win64>
|
||||
<CfgParent>Base</CfgParent>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Config)'=='Debug' or '$(Cfg_1)'!=''">
|
||||
<Cfg_1>true</Cfg_1>
|
||||
<CfgParent>Base</CfgParent>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Cfg_1)'=='true') or '$(Cfg_1_Win32)'!=''">
|
||||
<Cfg_1_Win32>true</Cfg_1_Win32>
|
||||
<CfgParent>Cfg_1</CfgParent>
|
||||
<Cfg_1>true</Cfg_1>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Config)'=='Release' or '$(Cfg_2)'!=''">
|
||||
<Cfg_2>true</Cfg_2>
|
||||
<CfgParent>Base</CfgParent>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Cfg_2)'=='true') or '$(Cfg_2_Win32)'!=''">
|
||||
<Cfg_2_Win32>true</Cfg_2_Win32>
|
||||
<CfgParent>Cfg_2</CfgParent>
|
||||
<Cfg_2>true</Cfg_2>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Base)'!=''">
|
||||
<DCC_DcuOutput>.\$(Platform)\$(Config)</DCC_DcuOutput>
|
||||
<DCC_ExeOutput>.\$(Platform)\$(Config)</DCC_ExeOutput>
|
||||
<DCC_E>false</DCC_E>
|
||||
<DCC_N>false</DCC_N>
|
||||
<DCC_S>false</DCC_S>
|
||||
<DCC_F>false</DCC_F>
|
||||
<DCC_K>false</DCC_K>
|
||||
<GenDll>true</GenDll>
|
||||
<GenPackage>true</GenPackage>
|
||||
<DCC_Namespace>System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace)</DCC_Namespace>
|
||||
<DCC_CBuilderOutput>All</DCC_CBuilderOutput>
|
||||
<SanitizedProjectName>dmvcframeworkDT</SanitizedProjectName>
|
||||
<VerInfo_Locale>1040</VerInfo_Locale>
|
||||
<VerInfo_Keys>CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=</VerInfo_Keys>
|
||||
<DCC_Description>DelphiMVCFramework IDE Expert</DCC_Description>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Base_Android)'!=''">
|
||||
<DCC_CBuilderOutput>None</DCC_CBuilderOutput>
|
||||
<EnabledSysJars>android-support-v4.dex.jar;cloud-messaging.dex.jar;fmx.dex.jar;google-analytics-v2.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar;google-play-services.dex.jar</EnabledSysJars>
|
||||
<DCC_UsePackage>rtl;IndySystem;IndyProtocols;IndyCore;dbrtl;$(DCC_UsePackage)</DCC_UsePackage>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Base_Linux64)'!=''">
|
||||
<DCC_UsePackage>rtl;IndySystem;IndyProtocols;IndyCore;dbrtl;$(DCC_UsePackage)</DCC_UsePackage>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Base_Win32)'!=''">
|
||||
<DCC_Namespace>Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)</DCC_Namespace>
|
||||
<BT_BuildType>Debug</BT_BuildType>
|
||||
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
|
||||
<VerInfo_Keys>CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=</VerInfo_Keys>
|
||||
<VerInfo_Locale>1033</VerInfo_Locale>
|
||||
<DCC_UsePackage>rtl;IndySystem;IndyProtocols;IndyCore;dbrtl;dmvcframeworkRT;$(DCC_UsePackage)</DCC_UsePackage>
|
||||
<DCC_Description>DelphiMVCFramework IDE Expert</DCC_Description>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Base_Win64)'!=''">
|
||||
<DCC_UsePackage>rtl;IndySystem;IndyProtocols;IndyCore;dbrtl;$(DCC_UsePackage)</DCC_UsePackage>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Cfg_1)'!=''">
|
||||
<DCC_Define>DEBUG;$(DCC_Define)</DCC_Define>
|
||||
<DCC_DebugDCUs>true</DCC_DebugDCUs>
|
||||
<DCC_Optimize>false</DCC_Optimize>
|
||||
<DCC_GenerateStackFrames>true</DCC_GenerateStackFrames>
|
||||
<DCC_DebugInfoInExe>true</DCC_DebugInfoInExe>
|
||||
<DCC_RemoteDebug>true</DCC_RemoteDebug>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Cfg_1_Win32)'!=''">
|
||||
<DCC_RemoteDebug>false</DCC_RemoteDebug>
|
||||
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
|
||||
<VerInfo_Locale>1033</VerInfo_Locale>
|
||||
<DllSuffix>xe8</DllSuffix>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Cfg_2)'!=''">
|
||||
<DCC_LocalDebugSymbols>false</DCC_LocalDebugSymbols>
|
||||
<DCC_Define>RELEASE;$(DCC_Define)</DCC_Define>
|
||||
<DCC_SymbolReferenceInfo>0</DCC_SymbolReferenceInfo>
|
||||
<DCC_DebugInformation>0</DCC_DebugInformation>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Cfg_2_Win32)'!=''">
|
||||
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
|
||||
<VerInfo_Locale>1033</VerInfo_Locale>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<DelphiCompile Include="$(MainSource)">
|
||||
<MainSource>MainSource</MainSource>
|
||||
</DelphiCompile>
|
||||
<DCCReference Include="rtl.dcp"/>
|
||||
<DCCReference Include="designide.dcp"/>
|
||||
<DCCReference Include="ExpertsCreators.dcp"/>
|
||||
<DCCReference Include="IndySystem.dcp"/>
|
||||
<DCCReference Include="IndyProtocols.dcp"/>
|
||||
<DCCReference Include="IndyCore.dcp"/>
|
||||
<DCCReference Include="dbrtl.dcp"/>
|
||||
<DCCReference Include="dmvcframeworkRT.dcp"/>
|
||||
<DCCReference Include="..\..\ideexpert\DMVC.Expert.CodeGen.NewControllerUnit.pas"/>
|
||||
<DCCReference Include="..\..\ideexpert\DMVC.Expert.CodeGen.NewDMVCProject.pas"/>
|
||||
<DCCReference Include="..\..\ideexpert\DMVC.Expert.CodeGen.NewProject.pas"/>
|
||||
<DCCReference Include="..\..\ideexpert\DMVC.Expert.CodeGen.NewUnit.pas"/>
|
||||
<DCCReference Include="..\..\ideexpert\DMVC.Expert.CodeGen.NewWebModuleUnit.pas"/>
|
||||
<DCCReference Include="..\..\ideexpert\DMVC.Expert.CodeGen.SourceFile.pas"/>
|
||||
<DCCReference Include="..\..\ideexpert\DMVC.Expert.CodeGen.Templates.pas"/>
|
||||
<DCCReference Include="..\..\ideexpert\DMVC.Expert.Forms.NewProjectWizard.pas">
|
||||
<Form>frmDMVCNewProject</Form>
|
||||
</DCCReference>
|
||||
<DCCReference Include="..\..\ideexpert\DMVC.Expert.Forms.NewUnitWizard.pas">
|
||||
<Form>frmDMVCNewUnit</Form>
|
||||
</DCCReference>
|
||||
<DCCReference Include="..\..\ideexpert\DMVC.Expert.NewUnitWizardEx.pas"/>
|
||||
<DCCReference Include="..\..\ideexpert\DMVC.Expert.ProjectWizardEx.pas"/>
|
||||
<DCCReference Include="..\..\ideexpert\DMVC.Expert.Registration.pas"/>
|
||||
<DCCReference Include="..\..\ideexpert\DMVC.Splash.Registration.pas"/>
|
||||
<RcItem Include="..\..\ideexpert\DMVC.Expert.NewProject.ico">
|
||||
<ResourceType>ICON</ResourceType>
|
||||
<ResourceId>DMVCNewProjectIcon</ResourceId>
|
||||
</RcItem>
|
||||
<RcItem Include="..\..\ideexpert\DMVC.Expert.NewUnit.ico">
|
||||
<ResourceType>ICON</ResourceType>
|
||||
<ResourceId>DMVCNewUnitIcon</ResourceId>
|
||||
</RcItem>
|
||||
<RcItem Include="..\..\ideexpert\SplashScreen.bmp">
|
||||
<ResourceType>BITMAP</ResourceType>
|
||||
<ResourceId>SplashScreen</ResourceId>
|
||||
</RcItem>
|
||||
<BuildConfiguration Include="Release">
|
||||
<Key>Cfg_2</Key>
|
||||
<CfgParent>Base</CfgParent>
|
||||
</BuildConfiguration>
|
||||
<BuildConfiguration Include="Base">
|
||||
<Key>Base</Key>
|
||||
</BuildConfiguration>
|
||||
<BuildConfiguration Include="Debug">
|
||||
<Key>Cfg_1</Key>
|
||||
<CfgParent>Base</CfgParent>
|
||||
</BuildConfiguration>
|
||||
</ItemGroup>
|
||||
<ProjectExtensions>
|
||||
<Borland.Personality>Delphi.Personality.12</Borland.Personality>
|
||||
<Borland.ProjectType>Package</Borland.ProjectType>
|
||||
<BorlandProject>
|
||||
<Delphi.Personality>
|
||||
<Source>
|
||||
<Source Name="MainSource">dmvcframeworkDT.dpk</Source>
|
||||
</Source>
|
||||
<Excluded_Packages>
|
||||
<Excluded_Packages Name="$(BDSBIN)\bcboffice2k260.bpl">Embarcadero C++Builder Office 2000 Servers Package</Excluded_Packages>
|
||||
<Excluded_Packages Name="$(BDSBIN)\bcbofficexp260.bpl">Embarcadero C++Builder Office XP Servers Package</Excluded_Packages>
|
||||
<Excluded_Packages Name="$(BDSBIN)\dcloffice2k260.bpl">Microsoft Office 2000 Sample Automation Server Wrapper Components</Excluded_Packages>
|
||||
<Excluded_Packages Name="$(BDSBIN)\dclofficexp260.bpl">Microsoft Office XP Sample Automation Server Wrapper Components</Excluded_Packages>
|
||||
</Excluded_Packages>
|
||||
</Delphi.Personality>
|
||||
<Deployment Version="3">
|
||||
<DeployFile LocalName="$(BDS)\Redist\osx32\libcgunwind.1.0.dylib" Class="DependencyModule">
|
||||
<Platform Name="OSX32">
|
||||
<Overwrite>true</Overwrite>
|
||||
</Platform>
|
||||
</DeployFile>
|
||||
<DeployFile LocalName="$(BDS)\Redist\osx64\libcgsqlite3.dylib" Class="DependencyModule">
|
||||
<Platform Name="OSX64">
|
||||
<Overwrite>true</Overwrite>
|
||||
</Platform>
|
||||
</DeployFile>
|
||||
<DeployFile LocalName="$(BDS)\Redist\iossimulator\libPCRE.dylib" Class="DependencyModule">
|
||||
<Platform Name="iOSSimulator">
|
||||
<Overwrite>true</Overwrite>
|
||||
</Platform>
|
||||
</DeployFile>
|
||||
<DeployFile LocalName="$(BDS)\Redist\iossimulator\libcgunwind.1.0.dylib" Class="DependencyModule">
|
||||
<Platform Name="iOSSimulator">
|
||||
<Overwrite>true</Overwrite>
|
||||
</Platform>
|
||||
</DeployFile>
|
||||
<DeployFile LocalName="$(BDS)\Redist\iossimulator\libpcre.dylib" Class="DependencyModule">
|
||||
<Platform Name="iOSSimulator">
|
||||
<Overwrite>true</Overwrite>
|
||||
</Platform>
|
||||
</DeployFile>
|
||||
<DeployFile LocalName="$(BDS)\Redist\osx32\libcgsqlite3.dylib" Class="DependencyModule">
|
||||
<Platform Name="OSX32">
|
||||
<Overwrite>true</Overwrite>
|
||||
</Platform>
|
||||
</DeployFile>
|
||||
<DeployFile LocalName="C:\Users\Public\Documents\Embarcadero\Studio\20.0\Bpl\dmvcframeworkDT100.bpl" Configuration="Debug" Class="ProjectOutput">
|
||||
<Platform Name="Win32">
|
||||
<RemoteName>dmvcframeworkDT.bpl</RemoteName>
|
||||
<Overwrite>true</Overwrite>
|
||||
</Platform>
|
||||
</DeployFile>
|
||||
<DeployClass Name="AdditionalDebugSymbols">
|
||||
<Platform Name="OSX32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Win32">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="AndroidClassesDexFile">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>classes</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="AndroidFileProvider">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\xml</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="AndroidGDBServer">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="AndroidLibnativeArmeabiFile">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>library\lib\armeabi</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="AndroidLibnativeMipsFile">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>library\lib\mips</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="AndroidServiceOutput">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="AndroidSplashImageDef">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="AndroidSplashStyles">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\values</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="AndroidSplashStylesV21">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\values-v21</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_DefaultAppIcon">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_LauncherIcon144">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable-xxhdpi</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_LauncherIcon36">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable-ldpi</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_LauncherIcon48">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable-mdpi</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_LauncherIcon72">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable-hdpi</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_LauncherIcon96">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable-xhdpi</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_SplashImage426">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable-small</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_SplashImage470">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable-normal</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_SplashImage640">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable-large</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_SplashImage960">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable-xlarge</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="DebugSymbols">
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="OSX32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Win32">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="DependencyFramework">
|
||||
<Platform Name="OSX32">
|
||||
<Operation>1</Operation>
|
||||
<Extensions>.framework</Extensions>
|
||||
</Platform>
|
||||
<Platform Name="OSX64">
|
||||
<Operation>1</Operation>
|
||||
<Extensions>.framework</Extensions>
|
||||
</Platform>
|
||||
<Platform Name="Win32">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="DependencyModule">
|
||||
<Platform Name="OSX32">
|
||||
<Operation>1</Operation>
|
||||
<Extensions>.dylib</Extensions>
|
||||
</Platform>
|
||||
<Platform Name="OSX64">
|
||||
<Operation>1</Operation>
|
||||
<Extensions>.dylib</Extensions>
|
||||
</Platform>
|
||||
<Platform Name="Win32">
|
||||
<Operation>0</Operation>
|
||||
<Extensions>.dll;.bpl</Extensions>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Required="true" Name="DependencyPackage">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
<Extensions>.dylib</Extensions>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
<Extensions>.dylib</Extensions>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
<Extensions>.dylib</Extensions>
|
||||
</Platform>
|
||||
<Platform Name="OSX32">
|
||||
<Operation>1</Operation>
|
||||
<Extensions>.dylib</Extensions>
|
||||
</Platform>
|
||||
<Platform Name="OSX64">
|
||||
<Operation>1</Operation>
|
||||
<Extensions>.dylib</Extensions>
|
||||
</Platform>
|
||||
<Platform Name="Win32">
|
||||
<Operation>0</Operation>
|
||||
<Extensions>.bpl</Extensions>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="File">
|
||||
<Platform Name="Android">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
<Platform Name="OSX32">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
<Platform Name="OSX64">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Win32">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="iPad_Launch1024">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="iPad_Launch1536">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="iPad_Launch2048">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="iPad_Launch768">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="iPhone_Launch320">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="iPhone_Launch640">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="iPhone_Launch640x1136">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="ProjectAndroidManifest">
|
||||
<Platform Name="Android">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="ProjectiOSDeviceDebug">
|
||||
<Platform Name="iOSDevice32">
|
||||
<RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="ProjectiOSDeviceResourceRules"/>
|
||||
<DeployClass Name="ProjectiOSEntitlements"/>
|
||||
<DeployClass Name="ProjectiOSInfoPList"/>
|
||||
<DeployClass Name="ProjectiOSResource">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="ProjectOSXDebug"/>
|
||||
<DeployClass Name="ProjectOSXEntitlements"/>
|
||||
<DeployClass Name="ProjectOSXInfoPList"/>
|
||||
<DeployClass Name="ProjectOSXResource">
|
||||
<Platform Name="OSX32">
|
||||
<RemoteDir>Contents\Resources</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="OSX64">
|
||||
<RemoteDir>Contents\Resources</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Required="true" Name="ProjectOutput">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Linux64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="OSX32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="OSX64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Win32">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="ProjectUWPManifest">
|
||||
<Platform Name="Win32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Win64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="UWP_DelphiLogo150">
|
||||
<Platform Name="Win32">
|
||||
<RemoteDir>Assets</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Win64">
|
||||
<RemoteDir>Assets</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="UWP_DelphiLogo44">
|
||||
<Platform Name="Win32">
|
||||
<RemoteDir>Assets</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Win64">
|
||||
<RemoteDir>Assets</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<ProjectRoot Platform="iOSDevice64" Name="$(PROJECTNAME).app"/>
|
||||
<ProjectRoot Platform="Win64" Name="$(PROJECTNAME)"/>
|
||||
<ProjectRoot Platform="iOSDevice32" Name="$(PROJECTNAME).app"/>
|
||||
<ProjectRoot Platform="Linux64" Name="$(PROJECTNAME)"/>
|
||||
<ProjectRoot Platform="Win32" Name="$(PROJECTNAME)"/>
|
||||
<ProjectRoot Platform="OSX32" Name="$(PROJECTNAME)"/>
|
||||
<ProjectRoot Platform="Android" Name="$(PROJECTNAME)"/>
|
||||
<ProjectRoot Platform="OSX64" Name="$(PROJECTNAME)"/>
|
||||
<ProjectRoot Platform="iOSSimulator" Name="$(PROJECTNAME).app"/>
|
||||
</Deployment>
|
||||
<Platforms>
|
||||
<Platform value="Android">False</Platform>
|
||||
<Platform value="Linux64">False</Platform>
|
||||
<Platform value="Win32">True</Platform>
|
||||
<Platform value="Win64">False</Platform>
|
||||
</Platforms>
|
||||
</BorlandProject>
|
||||
<ProjectFileVersion>12</ProjectFileVersion>
|
||||
</ProjectExtensions>
|
||||
<Import Project="$(BDS)\Bin\CodeGear.Delphi.Targets" Condition="Exists('$(BDS)\Bin\CodeGear.Delphi.Targets')"/>
|
||||
<Import Project="$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj" Condition="Exists('$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj')"/>
|
||||
<Import Project="$(MSBuildProjectName).deployproj" Condition="Exists('$(MSBuildProjectName).deployproj')"/>
|
||||
</Project>
|
3
packages/dxe8/dmvcframeworkDTResource.rc
Normal file
3
packages/dxe8/dmvcframeworkDTResource.rc
Normal file
@ -0,0 +1,3 @@
|
||||
DMVCNewProjectIcon ICON "..\\..\\ideexpert\\DMVC.Expert.NewProject.ico"
|
||||
DMVCNewUnitIcon ICON "..\\..\\ideexpert\\DMVC.Expert.NewUnit.ico"
|
||||
SplashScreen BITMAP "..\\..\\ideexpert\\SplashScreen.bmp"
|
99
packages/dxe8/dmvcframeworkRT.dpk
Normal file
99
packages/dxe8/dmvcframeworkRT.dpk
Normal file
@ -0,0 +1,99 @@
|
||||
package dmvcframeworkRT;
|
||||
|
||||
{$R *.res}
|
||||
{$IFDEF IMPLICITBUILDING This IFDEF should not be used by users}
|
||||
{$ALIGN 8}
|
||||
{$ASSERTIONS ON}
|
||||
{$BOOLEVAL OFF}
|
||||
{$DEBUGINFO OFF}
|
||||
{$EXTENDEDSYNTAX ON}
|
||||
{$IMPORTEDDATA ON}
|
||||
{$IOCHECKS ON}
|
||||
{$LOCALSYMBOLS ON}
|
||||
{$LONGSTRINGS ON}
|
||||
{$OPENSTRINGS ON}
|
||||
{$OPTIMIZATION OFF}
|
||||
{$OVERFLOWCHECKS OFF}
|
||||
{$RANGECHECKS OFF}
|
||||
{$REFERENCEINFO ON}
|
||||
{$SAFEDIVIDE OFF}
|
||||
{$STACKFRAMES ON}
|
||||
{$TYPEDADDRESS OFF}
|
||||
{$VARSTRINGCHECKS ON}
|
||||
{$WRITEABLECONST OFF}
|
||||
{$MINENUMSIZE 1}
|
||||
{$IMAGEBASE $400000}
|
||||
{$DEFINE DEBUG}
|
||||
{$ENDIF IMPLICITBUILDING}
|
||||
{$DESCRIPTION 'DMVCFramework 3.x'}
|
||||
{$LIBSUFFIX 'xe8'}
|
||||
{$RUNONLY}
|
||||
{$IMPLICITBUILD ON}
|
||||
|
||||
requires
|
||||
rtl,
|
||||
inet,
|
||||
dclcommon,
|
||||
dcldb,
|
||||
FireDAC,
|
||||
IndyCore,
|
||||
IndyProtocols,
|
||||
FireDACIBDriver,
|
||||
FireDACMySQLDriver,
|
||||
loggerproRT;
|
||||
|
||||
contains
|
||||
Web.ApacheConst,
|
||||
Web.Win.IsapiHTTP,
|
||||
Web.ApacheHTTP,
|
||||
Web.HTTPDMethods,
|
||||
Web.HTTPDImpl,
|
||||
JsonDataObjects in '..\..\sources\JsonDataObjects.pas',
|
||||
MVCFramework.ActiveRecord in '..\..\sources\MVCFramework.ActiveRecord.pas',
|
||||
MVCFramework.ActiveRecordController in '..\..\sources\MVCFramework.ActiveRecordController.pas',
|
||||
MVCFramework.ApplicationSession in '..\..\sources\MVCFramework.ApplicationSession.pas',
|
||||
MVCFramework.Cache in '..\..\sources\MVCFramework.Cache.pas',
|
||||
MVCFramework.Commons in '..\..\sources\MVCFramework.Commons.pas',
|
||||
MVCFramework.Console in '..\..\sources\MVCFramework.Console.pas',
|
||||
MVCFramework.DataSet.Utils in '..\..\sources\MVCFramework.DataSet.Utils.pas',
|
||||
MVCFramework.DuckTyping in '..\..\sources\MVCFramework.DuckTyping.pas',
|
||||
MVCFramework.FireDAC.Utils in '..\..\sources\MVCFramework.FireDAC.Utils.pas',
|
||||
MVCFramework.HMAC in '..\..\sources\MVCFramework.HMAC.pas',
|
||||
MVCFramework.JSONRPC.Client in '..\..\sources\MVCFramework.JSONRPC.Client.pas',
|
||||
MVCFramework.JSONRPC in '..\..\sources\MVCFramework.JSONRPC.pas',
|
||||
MVCFramework.JWT in '..\..\sources\MVCFramework.JWT.pas',
|
||||
MVCFramework.Logger in '..\..\sources\MVCFramework.Logger.pas',
|
||||
MVCFramework.Middleware.Analytics in '..\..\sources\MVCFramework.Middleware.Analytics.pas',
|
||||
MVCFramework.Middleware.Authentication in '..\..\sources\MVCFramework.Middleware.Authentication.pas',
|
||||
MVCFramework.Middleware.Authentication.RoleBasedAuthHandler in '..\..\sources\MVCFramework.Middleware.Authentication.RoleBasedAuthHandler.pas',
|
||||
MVCFramework.Middleware.Compression in '..\..\sources\MVCFramework.Middleware.Compression.pas',
|
||||
MVCFramework.Middleware.CORS in '..\..\sources\MVCFramework.Middleware.CORS.pas',
|
||||
MVCFramework.Middleware.JWT in '..\..\sources\MVCFramework.Middleware.JWT.pas',
|
||||
MVCFramework.Middleware.SecurityHeaders in '..\..\sources\MVCFramework.Middleware.SecurityHeaders.pas',
|
||||
MVCFramework.MultiMap in '..\..\sources\MVCFramework.MultiMap.pas',
|
||||
MVCFramework in '..\..\sources\MVCFramework.pas',
|
||||
MVCFramework.Patches in '..\..\sources\MVCFramework.Patches.pas',
|
||||
MVCFramework.RESTAdapter in '..\..\sources\MVCFramework.RESTAdapter.pas',
|
||||
MVCFramework.RESTClient in '..\..\sources\MVCFramework.RESTClient.pas',
|
||||
MVCFramework.Router in '..\..\sources\MVCFramework.Router.pas',
|
||||
MVCFramework.RQL.AST2FirebirdSQL in '..\..\sources\MVCFramework.RQL.AST2FirebirdSQL.pas',
|
||||
MVCFramework.RQL.AST2InterbaseSQL in '..\..\sources\MVCFramework.RQL.AST2InterbaseSQL.pas',
|
||||
MVCFramework.RQL.AST2MySQL in '..\..\sources\MVCFramework.RQL.AST2MySQL.pas',
|
||||
MVCFramework.RQL.AST2PostgreSQL in '..\..\sources\MVCFramework.RQL.AST2PostgreSQL.pas',
|
||||
MVCFramework.RQL.Parser in '..\..\sources\MVCFramework.RQL.Parser.pas',
|
||||
MVCFramework.Rtti.Utils in '..\..\sources\MVCFramework.Rtti.Utils.pas',
|
||||
MVCFramework.Serializer.Abstract in '..\..\sources\MVCFramework.Serializer.Abstract.pas',
|
||||
MVCFramework.Serializer.Commons in '..\..\sources\MVCFramework.Serializer.Commons.pas',
|
||||
MVCFramework.Serializer.Defaults in '..\..\sources\MVCFramework.Serializer.Defaults.pas',
|
||||
MVCFramework.Serializer.Intf in '..\..\sources\MVCFramework.Serializer.Intf.pas',
|
||||
MVCFramework.Serializer.JsonDataObjects.CustomTypes in '..\..\sources\MVCFramework.Serializer.JsonDataObjects.CustomTypes.pas',
|
||||
MVCFramework.Serializer.JsonDataObjects in '..\..\sources\MVCFramework.Serializer.JsonDataObjects.pas',
|
||||
MVCFramework.Session in '..\..\sources\MVCFramework.Session.pas',
|
||||
MVCFramework.SQLGenerators.Firebird in '..\..\sources\MVCFramework.SQLGenerators.Firebird.pas',
|
||||
MVCFramework.SQLGenerators.MySQL in '..\..\sources\MVCFramework.SQLGenerators.MySQL.pas',
|
||||
MVCFramework.SysControllers in '..\..\sources\MVCFramework.SysControllers.pas',
|
||||
MVCFramework.SystemJSONUtils in '..\..\sources\MVCFramework.SystemJSONUtils.pas',
|
||||
MVCFramework.View.Cache in '..\..\sources\MVCFramework.View.Cache.pas';
|
||||
|
||||
end.
|
||||
|
619
packages/dxe8/dmvcframeworkRT.dproj
Normal file
619
packages/dxe8/dmvcframeworkRT.dproj
Normal file
@ -0,0 +1,619 @@
|
||||
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<ProjectGuid>{96D17257-AF74-48CB-9893-7BCCB56A069D}</ProjectGuid>
|
||||
<MainSource>dmvcframeworkRT.dpk</MainSource>
|
||||
<ProjectVersion>18.6</ProjectVersion>
|
||||
<FrameworkType>None</FrameworkType>
|
||||
<Base>True</Base>
|
||||
<Config Condition="'$(Config)'==''">Debug</Config>
|
||||
<Platform Condition="'$(Platform)'==''">Win32</Platform>
|
||||
<TargetedPlatforms>1</TargetedPlatforms>
|
||||
<AppType>Package</AppType>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''">
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="('$(Platform)'=='Android' and '$(Base)'=='true') or '$(Base_Android)'!=''">
|
||||
<Base_Android>true</Base_Android>
|
||||
<CfgParent>Base</CfgParent>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Base)'=='true') or '$(Base_Win32)'!=''">
|
||||
<Base_Win32>true</Base_Win32>
|
||||
<CfgParent>Base</CfgParent>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Config)'=='Debug' or '$(Cfg_1)'!=''">
|
||||
<Cfg_1>true</Cfg_1>
|
||||
<CfgParent>Base</CfgParent>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Cfg_1)'=='true') or '$(Cfg_1_Win32)'!=''">
|
||||
<Cfg_1_Win32>true</Cfg_1_Win32>
|
||||
<CfgParent>Cfg_1</CfgParent>
|
||||
<Cfg_1>true</Cfg_1>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Config)'=='Release' or '$(Cfg_2)'!=''">
|
||||
<Cfg_2>true</Cfg_2>
|
||||
<CfgParent>Base</CfgParent>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Base)'!=''">
|
||||
<DCC_DcuOutput>.\$(Platform)\$(Config)</DCC_DcuOutput>
|
||||
<DCC_ExeOutput>.\$(Platform)\$(Config)</DCC_ExeOutput>
|
||||
<DCC_E>false</DCC_E>
|
||||
<DCC_N>false</DCC_N>
|
||||
<DCC_S>false</DCC_S>
|
||||
<DCC_F>false</DCC_F>
|
||||
<DCC_K>false</DCC_K>
|
||||
<GenDll>true</GenDll>
|
||||
<GenPackage>true</GenPackage>
|
||||
<DCC_Namespace>System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace)</DCC_Namespace>
|
||||
<DCC_CBuilderOutput>All</DCC_CBuilderOutput>
|
||||
<SanitizedProjectName>dmvcframeworkRT</SanitizedProjectName>
|
||||
<RuntimeOnlyPackage>true</RuntimeOnlyPackage>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Base_Android)'!=''">
|
||||
<DCC_CBuilderOutput>None</DCC_CBuilderOutput>
|
||||
<EnabledSysJars>android-support-v4.dex.jar;cloud-messaging.dex.jar;fmx.dex.jar;google-analytics-v2.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar;google-play-services-ads-7.0.0.dex.jar;google-play-services-analytics-7.0.0.dex.jar;google-play-services-base-7.0.0.dex.jar;google-play-services-gcm-7.0.0.dex.jar;google-play-services-identity-7.0.0.dex.jar;google-play-services-maps-7.0.0.dex.jar;google-play-services-panorama-7.0.0.dex.jar;google-play-services-plus-7.0.0.dex.jar;google-play-services-wallet-7.0.0.dex.jar</EnabledSysJars>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Base_Win32)'!=''">
|
||||
<DCC_Namespace>Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)</DCC_Namespace>
|
||||
<BT_BuildType>Debug</BT_BuildType>
|
||||
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
|
||||
<VerInfo_Keys>CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=</VerInfo_Keys>
|
||||
<VerInfo_Locale>1033</VerInfo_Locale>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Cfg_1)'!=''">
|
||||
<DCC_Define>DEBUG;$(DCC_Define)</DCC_Define>
|
||||
<DCC_DebugDCUs>true</DCC_DebugDCUs>
|
||||
<DCC_Optimize>false</DCC_Optimize>
|
||||
<DCC_GenerateStackFrames>true</DCC_GenerateStackFrames>
|
||||
<DCC_DebugInfoInExe>true</DCC_DebugInfoInExe>
|
||||
<DCC_RemoteDebug>true</DCC_RemoteDebug>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Cfg_1_Win32)'!=''">
|
||||
<Debugger_HostApplication>C:\DEV\dmscontainer_centrosoftware\bin\DMSContainerService.exe</Debugger_HostApplication>
|
||||
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
|
||||
<VerInfo_Locale>1033</VerInfo_Locale>
|
||||
<DCC_MapFile>3</DCC_MapFile>
|
||||
<DCC_Description>DMVCFramework 3.x</DCC_Description>
|
||||
<DllSuffix>xe8</DllSuffix>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Cfg_2)'!=''">
|
||||
<DCC_LocalDebugSymbols>false</DCC_LocalDebugSymbols>
|
||||
<DCC_Define>RELEASE;$(DCC_Define)</DCC_Define>
|
||||
<DCC_SymbolReferenceInfo>0</DCC_SymbolReferenceInfo>
|
||||
<DCC_DebugInformation>0</DCC_DebugInformation>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<DelphiCompile Include="$(MainSource)">
|
||||
<MainSource>MainSource</MainSource>
|
||||
</DelphiCompile>
|
||||
<DCCReference Include="rtl.dcp"/>
|
||||
<DCCReference Include="inet.dcp"/>
|
||||
<DCCReference Include="dclcommon.dcp"/>
|
||||
<DCCReference Include="dcldb.dcp"/>
|
||||
<DCCReference Include="FireDAC.dcp"/>
|
||||
<DCCReference Include="IndyCore.dcp"/>
|
||||
<DCCReference Include="IndyProtocols.dcp"/>
|
||||
<DCCReference Include="FireDACIBDriver.dcp"/>
|
||||
<DCCReference Include="FireDACMySQLDriver.dcp"/>
|
||||
<DCCReference Include="loggerproRT.dcp"/>
|
||||
<DCCReference Include="..\..\sources\JsonDataObjects.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.ActiveRecord.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.ActiveRecordController.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.ApplicationSession.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.Cache.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.Commons.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.Console.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.DataSet.Utils.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.DuckTyping.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.FireDAC.Utils.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.HMAC.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.JSONRPC.Client.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.JSONRPC.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.JWT.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.Logger.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.Middleware.Analytics.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.Middleware.Authentication.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.Middleware.Authentication.RoleBasedAuthHandler.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.Middleware.Compression.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.Middleware.CORS.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.Middleware.JWT.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.Middleware.SecurityHeaders.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.MultiMap.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.Patches.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.RESTAdapter.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.RESTClient.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.Router.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.RQL.AST2FirebirdSQL.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.RQL.AST2InterbaseSQL.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.RQL.AST2MySQL.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.RQL.AST2PostgreSQL.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.RQL.Parser.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.Rtti.Utils.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.Serializer.Abstract.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.Serializer.Commons.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.Serializer.Defaults.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.Serializer.Intf.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.Serializer.JsonDataObjects.CustomTypes.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.Serializer.JsonDataObjects.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.Session.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.SQLGenerators.Firebird.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.SQLGenerators.MySQL.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.SysControllers.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.SystemJSONUtils.pas"/>
|
||||
<DCCReference Include="..\..\sources\MVCFramework.View.Cache.pas"/>
|
||||
<BuildConfiguration Include="Release">
|
||||
<Key>Cfg_2</Key>
|
||||
<CfgParent>Base</CfgParent>
|
||||
</BuildConfiguration>
|
||||
<BuildConfiguration Include="Base">
|
||||
<Key>Base</Key>
|
||||
</BuildConfiguration>
|
||||
<BuildConfiguration Include="Debug">
|
||||
<Key>Cfg_1</Key>
|
||||
<CfgParent>Base</CfgParent>
|
||||
</BuildConfiguration>
|
||||
</ItemGroup>
|
||||
<ProjectExtensions>
|
||||
<Borland.Personality>Delphi.Personality.12</Borland.Personality>
|
||||
<Borland.ProjectType>Package</Borland.ProjectType>
|
||||
<BorlandProject>
|
||||
<Delphi.Personality>
|
||||
<Source>
|
||||
<Source Name="MainSource">dmvcframeworkRT.dpk</Source>
|
||||
</Source>
|
||||
<Excluded_Packages>
|
||||
<Excluded_Packages Name="$(BDSBIN)\bcboffice2k260.bpl">Embarcadero C++Builder Office 2000 Servers Package</Excluded_Packages>
|
||||
<Excluded_Packages Name="$(BDSBIN)\bcbofficexp260.bpl">Embarcadero C++Builder Office XP Servers Package</Excluded_Packages>
|
||||
<Excluded_Packages Name="$(BDSBIN)\dcloffice2k260.bpl">Microsoft Office 2000 Sample Automation Server Wrapper Components</Excluded_Packages>
|
||||
<Excluded_Packages Name="$(BDSBIN)\dclofficexp260.bpl">Microsoft Office XP Sample Automation Server Wrapper Components</Excluded_Packages>
|
||||
</Excluded_Packages>
|
||||
</Delphi.Personality>
|
||||
<Deployment Version="3">
|
||||
<DeployFile LocalName="$(BDS)\Redist\osx32\libcgunwind.1.0.dylib" Class="DependencyModule">
|
||||
<Platform Name="OSX32">
|
||||
<Overwrite>true</Overwrite>
|
||||
</Platform>
|
||||
</DeployFile>
|
||||
<DeployFile LocalName="$(BDS)\Redist\osx64\libcgsqlite3.dylib" Class="DependencyModule">
|
||||
<Platform Name="OSX64">
|
||||
<Overwrite>true</Overwrite>
|
||||
</Platform>
|
||||
</DeployFile>
|
||||
<DeployFile LocalName="$(BDS)\Redist\iossimulator\libPCRE.dylib" Class="DependencyModule">
|
||||
<Platform Name="iOSSimulator">
|
||||
<Overwrite>true</Overwrite>
|
||||
</Platform>
|
||||
</DeployFile>
|
||||
<DeployFile LocalName="$(BDS)\Redist\iossimulator\libcgunwind.1.0.dylib" Class="DependencyModule">
|
||||
<Platform Name="iOSSimulator">
|
||||
<Overwrite>true</Overwrite>
|
||||
</Platform>
|
||||
</DeployFile>
|
||||
<DeployFile LocalName="$(BDS)\Redist\iossimulator\libpcre.dylib" Class="DependencyModule">
|
||||
<Platform Name="iOSSimulator">
|
||||
<Overwrite>true</Overwrite>
|
||||
</Platform>
|
||||
</DeployFile>
|
||||
<DeployFile LocalName="$(BDS)\Redist\osx32\libcgsqlite3.dylib" Class="DependencyModule">
|
||||
<Platform Name="OSX32">
|
||||
<Overwrite>true</Overwrite>
|
||||
</Platform>
|
||||
</DeployFile>
|
||||
<DeployFile LocalName="C:\Users\Public\Documents\Embarcadero\Studio\20.0\Bpl\dmvcframeworkRT100.bpl" Configuration="Debug" Class="ProjectOutput">
|
||||
<Platform Name="Win32">
|
||||
<RemoteName>dmvcframeworkRT.bpl</RemoteName>
|
||||
<Overwrite>true</Overwrite>
|
||||
</Platform>
|
||||
</DeployFile>
|
||||
<DeployClass Name="AdditionalDebugSymbols">
|
||||
<Platform Name="OSX32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Win32">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="AndroidClassesDexFile">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>classes</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="AndroidFileProvider">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\xml</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="AndroidGDBServer">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="AndroidLibnativeArmeabiFile">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>library\lib\armeabi</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="AndroidLibnativeMipsFile">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>library\lib\mips</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="AndroidServiceOutput">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="AndroidSplashImageDef">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="AndroidSplashStyles">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\values</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="AndroidSplashStylesV21">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\values-v21</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_DefaultAppIcon">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_LauncherIcon144">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable-xxhdpi</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_LauncherIcon36">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable-ldpi</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_LauncherIcon48">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable-mdpi</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_LauncherIcon72">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable-hdpi</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_LauncherIcon96">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable-xhdpi</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_SplashImage426">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable-small</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_SplashImage470">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable-normal</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_SplashImage640">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable-large</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_SplashImage960">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable-xlarge</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="DebugSymbols">
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="OSX32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Win32">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="DependencyFramework">
|
||||
<Platform Name="OSX32">
|
||||
<Operation>1</Operation>
|
||||
<Extensions>.framework</Extensions>
|
||||
</Platform>
|
||||
<Platform Name="OSX64">
|
||||
<Operation>1</Operation>
|
||||
<Extensions>.framework</Extensions>
|
||||
</Platform>
|
||||
<Platform Name="Win32">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="DependencyModule">
|
||||
<Platform Name="OSX32">
|
||||
<Operation>1</Operation>
|
||||
<Extensions>.dylib</Extensions>
|
||||
</Platform>
|
||||
<Platform Name="OSX64">
|
||||
<Operation>1</Operation>
|
||||
<Extensions>.dylib</Extensions>
|
||||
</Platform>
|
||||
<Platform Name="Win32">
|
||||
<Operation>0</Operation>
|
||||
<Extensions>.dll;.bpl</Extensions>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Required="true" Name="DependencyPackage">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
<Extensions>.dylib</Extensions>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
<Extensions>.dylib</Extensions>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
<Extensions>.dylib</Extensions>
|
||||
</Platform>
|
||||
<Platform Name="OSX32">
|
||||
<Operation>1</Operation>
|
||||
<Extensions>.dylib</Extensions>
|
||||
</Platform>
|
||||
<Platform Name="OSX64">
|
||||
<Operation>1</Operation>
|
||||
<Extensions>.dylib</Extensions>
|
||||
</Platform>
|
||||
<Platform Name="Win32">
|
||||
<Operation>0</Operation>
|
||||
<Extensions>.bpl</Extensions>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="File">
|
||||
<Platform Name="Android">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
<Platform Name="OSX32">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
<Platform Name="OSX64">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Win32">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="iPad_Launch1024">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="iPad_Launch1536">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="iPad_Launch2048">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="iPad_Launch768">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="iPhone_Launch320">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="iPhone_Launch640">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="iPhone_Launch640x1136">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="ProjectAndroidManifest">
|
||||
<Platform Name="Android">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="ProjectiOSDeviceDebug">
|
||||
<Platform Name="iOSDevice32">
|
||||
<RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="ProjectiOSDeviceResourceRules"/>
|
||||
<DeployClass Name="ProjectiOSEntitlements"/>
|
||||
<DeployClass Name="ProjectiOSInfoPList"/>
|
||||
<DeployClass Name="ProjectiOSResource">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="ProjectOSXDebug"/>
|
||||
<DeployClass Name="ProjectOSXEntitlements"/>
|
||||
<DeployClass Name="ProjectOSXInfoPList"/>
|
||||
<DeployClass Name="ProjectOSXResource">
|
||||
<Platform Name="OSX32">
|
||||
<RemoteDir>Contents\Resources</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="OSX64">
|
||||
<RemoteDir>Contents\Resources</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Required="true" Name="ProjectOutput">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Linux64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="OSX32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="OSX64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Win32">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="ProjectUWPManifest">
|
||||
<Platform Name="Win32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Win64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="UWP_DelphiLogo150">
|
||||
<Platform Name="Win32">
|
||||
<RemoteDir>Assets</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Win64">
|
||||
<RemoteDir>Assets</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="UWP_DelphiLogo44">
|
||||
<Platform Name="Win32">
|
||||
<RemoteDir>Assets</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Win64">
|
||||
<RemoteDir>Assets</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<ProjectRoot Platform="iOSDevice64" Name="$(PROJECTNAME).app"/>
|
||||
<ProjectRoot Platform="Win64" Name="$(PROJECTNAME)"/>
|
||||
<ProjectRoot Platform="iOSDevice32" Name="$(PROJECTNAME).app"/>
|
||||
<ProjectRoot Platform="Linux64" Name="$(PROJECTNAME)"/>
|
||||
<ProjectRoot Platform="Win32" Name="$(PROJECTNAME)"/>
|
||||
<ProjectRoot Platform="OSX32" Name="$(PROJECTNAME)"/>
|
||||
<ProjectRoot Platform="Android" Name="$(PROJECTNAME)"/>
|
||||
<ProjectRoot Platform="OSX64" Name="$(PROJECTNAME)"/>
|
||||
<ProjectRoot Platform="iOSSimulator" Name="$(PROJECTNAME).app"/>
|
||||
</Deployment>
|
||||
<Platforms>
|
||||
<Platform value="Android">False</Platform>
|
||||
<Platform value="Linux64">False</Platform>
|
||||
<Platform value="Win32">True</Platform>
|
||||
<Platform value="Win64">False</Platform>
|
||||
</Platforms>
|
||||
</BorlandProject>
|
||||
<ProjectFileVersion>12</ProjectFileVersion>
|
||||
</ProjectExtensions>
|
||||
<Import Project="$(BDS)\Bin\CodeGear.Delphi.Targets" Condition="Exists('$(BDS)\Bin\CodeGear.Delphi.Targets')"/>
|
||||
<Import Project="$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj" Condition="Exists('$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj')"/>
|
||||
<Import Project="$(MSBuildProjectName).deployproj" Condition="Exists('$(MSBuildProjectName).deployproj')"/>
|
||||
</Project>
|
60
packages/dxe8/dmvcframework_group.groupproj
Normal file
60
packages/dxe8/dmvcframework_group.groupproj
Normal file
@ -0,0 +1,60 @@
|
||||
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<ProjectGuid>{EA879EE4-1245-4456-AED9-57FDF63577E5}</ProjectGuid>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Projects Include="..\..\lib\loggerpro\packages\dxe8\loggerproRT.dproj">
|
||||
<Dependencies/>
|
||||
</Projects>
|
||||
<Projects Include="dmvcframeworkRT.dproj">
|
||||
<Dependencies>..\..\lib\loggerpro\packages\dxe8\loggerproRT.dproj</Dependencies>
|
||||
</Projects>
|
||||
<Projects Include="dmvcframeworkDT.dproj">
|
||||
<Dependencies>dmvcframeworkRT.dproj</Dependencies>
|
||||
</Projects>
|
||||
</ItemGroup>
|
||||
<ProjectExtensions>
|
||||
<Borland.Personality>Default.Personality.12</Borland.Personality>
|
||||
<Borland.ProjectType/>
|
||||
<BorlandProject>
|
||||
<Default.Personality/>
|
||||
</BorlandProject>
|
||||
</ProjectExtensions>
|
||||
<Target Name="loggerproRT">
|
||||
<MSBuild Projects="..\..\lib\loggerpro\packages\dxe8\loggerproRT.dproj"/>
|
||||
</Target>
|
||||
<Target Name="loggerproRT:Clean">
|
||||
<MSBuild Projects="..\..\lib\loggerpro\packages\dxe8\loggerproRT.dproj" Targets="Clean"/>
|
||||
</Target>
|
||||
<Target Name="loggerproRT:Make">
|
||||
<MSBuild Projects="..\..\lib\loggerpro\packages\dxe8\loggerproRT.dproj" Targets="Make"/>
|
||||
</Target>
|
||||
<Target Name="dmvcframeworkRT" DependsOnTargets="loggerproRT">
|
||||
<MSBuild Projects="dmvcframeworkRT.dproj"/>
|
||||
</Target>
|
||||
<Target Name="dmvcframeworkRT:Clean" DependsOnTargets="loggerproRT:Clean">
|
||||
<MSBuild Projects="dmvcframeworkRT.dproj" Targets="Clean"/>
|
||||
</Target>
|
||||
<Target Name="dmvcframeworkRT:Make" DependsOnTargets="loggerproRT:Make">
|
||||
<MSBuild Projects="dmvcframeworkRT.dproj" Targets="Make"/>
|
||||
</Target>
|
||||
<Target Name="dmvcframeworkDT" DependsOnTargets="dmvcframeworkRT">
|
||||
<MSBuild Projects="dmvcframeworkDT.dproj"/>
|
||||
</Target>
|
||||
<Target Name="dmvcframeworkDT:Clean" DependsOnTargets="dmvcframeworkRT:Clean">
|
||||
<MSBuild Projects="dmvcframeworkDT.dproj" Targets="Clean"/>
|
||||
</Target>
|
||||
<Target Name="dmvcframeworkDT:Make" DependsOnTargets="dmvcframeworkRT:Make">
|
||||
<MSBuild Projects="dmvcframeworkDT.dproj" Targets="Make"/>
|
||||
</Target>
|
||||
<Target Name="Build">
|
||||
<CallTarget Targets="loggerproRT;dmvcframeworkRT;dmvcframeworkDT"/>
|
||||
</Target>
|
||||
<Target Name="Clean">
|
||||
<CallTarget Targets="loggerproRT:Clean;dmvcframeworkRT:Clean;dmvcframeworkDT:Clean"/>
|
||||
</Target>
|
||||
<Target Name="Make">
|
||||
<CallTarget Targets="loggerproRT:Make;dmvcframeworkRT:Make;dmvcframeworkDT:Make"/>
|
||||
</Target>
|
||||
<Import Project="$(BDS)\Bin\CodeGear.Group.Targets" Condition="Exists('$(BDS)\Bin\CodeGear.Group.Targets')"/>
|
||||
</Project>
|
@ -1,7 +1,7 @@
|
||||
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<ProjectGuid>{41237016-48D9-45F1-8FFC-66D1B61A206B}</ProjectGuid>
|
||||
<ProjectVersion>18.5</ProjectVersion>
|
||||
<ProjectVersion>18.6</ProjectVersion>
|
||||
<FrameworkType>VCL</FrameworkType>
|
||||
<MainSource>articles_crud.dpr</MainSource>
|
||||
<Base>True</Base>
|
||||
|
@ -1,7 +1,7 @@
|
||||
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<ProjectGuid>{B180E3D7-5F42-49CE-84F1-042196300A37}</ProjectGuid>
|
||||
<ProjectVersion>18.4</ProjectVersion>
|
||||
<ProjectVersion>18.6</ProjectVersion>
|
||||
<FrameworkType>VCL</FrameworkType>
|
||||
<MainSource>articles_crud_vcl_client.dpr</MainSource>
|
||||
<Base>True</Base>
|
||||
@ -144,7 +144,6 @@
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Win32">
|
||||
<RemoteDir>Contents\MacOS</RemoteDir>
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
@ -154,6 +153,12 @@
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="AndroidFileProvider">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\xml</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="AndroidGDBServer">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
|
||||
@ -191,6 +196,12 @@
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="AndroidSplashStylesV21">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\values-v21</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_DefaultAppIcon">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable</RemoteDir>
|
||||
@ -269,6 +280,11 @@
|
||||
<Operation>1</Operation>
|
||||
<Extensions>.framework</Extensions>
|
||||
</Platform>
|
||||
<Platform Name="OSX64">
|
||||
<RemoteDir>Contents\MacOS</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
<Extensions>.framework</Extensions>
|
||||
</Platform>
|
||||
<Platform Name="Win32">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
@ -291,6 +307,11 @@
|
||||
<Operation>1</Operation>
|
||||
<Extensions>.dylib</Extensions>
|
||||
</Platform>
|
||||
<Platform Name="OSX64">
|
||||
<RemoteDir>Contents\MacOS</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
<Extensions>.dylib</Extensions>
|
||||
</Platform>
|
||||
<Platform Name="Win32">
|
||||
<Operation>0</Operation>
|
||||
<Extensions>.dll;.bpl</Extensions>
|
||||
@ -314,6 +335,11 @@
|
||||
<Operation>1</Operation>
|
||||
<Extensions>.dylib</Extensions>
|
||||
</Platform>
|
||||
<Platform Name="OSX64">
|
||||
<RemoteDir>Contents\MacOS</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
<Extensions>.dylib</Extensions>
|
||||
</Platform>
|
||||
<Platform Name="Win32">
|
||||
<Operation>0</Operation>
|
||||
<Extensions>.bpl</Extensions>
|
||||
@ -336,6 +362,10 @@
|
||||
<RemoteDir>Contents\Resources\StartUp\</RemoteDir>
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
<Platform Name="OSX64">
|
||||
<RemoteDir>Contents\Resources\StartUp\</RemoteDir>
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Win32">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
@ -472,23 +502,41 @@
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="ProjectOSXDebug">
|
||||
<Platform Name="OSX64">
|
||||
<RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="ProjectOSXEntitlements">
|
||||
<Platform Name="OSX32">
|
||||
<RemoteDir>..\</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="OSX64">
|
||||
<RemoteDir>..\</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="ProjectOSXInfoPList">
|
||||
<Platform Name="OSX32">
|
||||
<RemoteDir>Contents</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="OSX64">
|
||||
<RemoteDir>Contents</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="ProjectOSXResource">
|
||||
<Platform Name="OSX32">
|
||||
<RemoteDir>Contents\Resources</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="OSX64">
|
||||
<RemoteDir>Contents\Resources</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Required="true" Name="ProjectOutput">
|
||||
<Platform Name="Android">
|
||||
@ -511,6 +559,10 @@
|
||||
<RemoteDir>Contents\MacOS</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="OSX64">
|
||||
<RemoteDir>Contents\MacOS</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Win32">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
@ -550,6 +602,7 @@
|
||||
<ProjectRoot Platform="Linux64" Name="$(PROJECTNAME)"/>
|
||||
<ProjectRoot Platform="OSX32" Name="$(PROJECTNAME).app"/>
|
||||
<ProjectRoot Platform="Android" Name="$(PROJECTNAME)"/>
|
||||
<ProjectRoot Platform="OSX64" Name="$(PROJECTNAME).app"/>
|
||||
<ProjectRoot Platform="iOSSimulator" Name="$(PROJECTNAME).app"/>
|
||||
</Deployment>
|
||||
<Platforms>
|
||||
|
@ -39,18 +39,21 @@ type
|
||||
FDOB: TDate;
|
||||
FFirstName: string;
|
||||
FMarried: boolean;
|
||||
fID: Int64;
|
||||
procedure SetDOB(const Value: TDate);
|
||||
procedure SetFirstName(const Value: string);
|
||||
procedure SetLastName(const Value: string);
|
||||
procedure SetMarried(const Value: boolean);
|
||||
public
|
||||
function Equals(Obj: TObject): boolean; override;
|
||||
|
||||
property ID: Int64 read fID write fID;
|
||||
property FirstName: string read FFirstName write SetFirstName;
|
||||
property LastName: string read FLastName write SetLastName;
|
||||
|
||||
property DOB: TDate read FDOB write SetDOB;
|
||||
property Married: boolean read FMarried write SetMarried;
|
||||
|
||||
constructor Create; virtual;
|
||||
class function GetNew(AFirstName, ALastName: string; ADOB: TDate; AMarried: boolean): TPerson;
|
||||
class function GetList(const aCount: Integer = 3): TObjectList<TPerson>;
|
||||
end;
|
||||
@ -137,6 +140,12 @@ uses
|
||||
|
||||
{ TPerson }
|
||||
|
||||
constructor TPerson.Create;
|
||||
begin
|
||||
inherited Create;
|
||||
fID := 1000 + Random(1000);
|
||||
end;
|
||||
|
||||
function TPerson.Equals(Obj: TObject): boolean;
|
||||
begin
|
||||
Result := Obj is TPerson;
|
||||
@ -157,7 +166,7 @@ begin
|
||||
begin // retrocompatibility
|
||||
Result := TObjectList<TPerson>.Create(true);
|
||||
Result.Add(TPerson.GetNew('Tony', 'Stark', EncodeDate(1965, 5, 15), true));
|
||||
Result.Add(TPerson.GetNew('Stevene', 'Rogers', 0, true));
|
||||
Result.Add(TPerson.GetNew('Steve', 'Rogers', 0, true));
|
||||
Result.Add(TPerson.GetNew('Bruce', 'Banner', 0, true));
|
||||
end
|
||||
else
|
||||
@ -165,7 +174,8 @@ begin
|
||||
Result := TObjectList<TPerson>.Create(true);
|
||||
for I := 1 to aCount do
|
||||
begin
|
||||
Result.Add(TPerson.GetNew(GetRndFirstName, GetRndLastName, EncodeDate(1900 + Random(100), Random(12) + 1, Random(27) + 1), true));
|
||||
Result.Add(TPerson.GetNew(GetRndFirstName, GetRndLastName, EncodeDate(1900 + Random(100),
|
||||
Random(12) + 1, Random(27) + 1), true));
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
@ -314,4 +324,8 @@ begin
|
||||
inherited;
|
||||
end;
|
||||
|
||||
initialization
|
||||
|
||||
Randomize;
|
||||
|
||||
end.
|
||||
|
@ -176,10 +176,10 @@ end;
|
||||
function TMyObject.GetStringDictionary: TMVCStringDictionary;
|
||||
begin
|
||||
Result := TMVCStringDictionary.Create;
|
||||
Result.AddProperty('key1', 'value1');
|
||||
Result.AddProperty('key2', 'value2');
|
||||
Result.AddProperty('key3', 'value3');
|
||||
Result.AddProperty('key4', 'value4');
|
||||
Result.Add('key1', 'value1');
|
||||
Result.Add('key2', 'value2');
|
||||
Result.Add('key3', 'value3');
|
||||
Result.Add('key4', 'value4');
|
||||
end;
|
||||
|
||||
function TMyObject.GetUser(aUserName: string): TPerson;
|
||||
|
@ -1,7 +1,7 @@
|
||||
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<ProjectGuid>{7B54055A-5749-4136-9FE2-35FDBEEA874C}</ProjectGuid>
|
||||
<ProjectVersion>18.5</ProjectVersion>
|
||||
<ProjectVersion>18.6</ProjectVersion>
|
||||
<FrameworkType>VCL</FrameworkType>
|
||||
<MainSource>JWTServer.dpr</MainSource>
|
||||
<Base>True</Base>
|
||||
|
@ -1,7 +1,7 @@
|
||||
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<ProjectGuid>{E7317702-64D3-4A65-8734-030F3AE3DBBC}</ProjectGuid>
|
||||
<ProjectVersion>18.5</ProjectVersion>
|
||||
<ProjectVersion>18.6</ProjectVersion>
|
||||
<FrameworkType>VCL</FrameworkType>
|
||||
<MainSource>JWTClient.dpr</MainSource>
|
||||
<Base>True</Base>
|
||||
|
@ -1,7 +1,7 @@
|
||||
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<ProjectGuid>{7B54055A-5749-4136-9FE2-35FDBEEA874C}</ProjectGuid>
|
||||
<ProjectVersion>18.5</ProjectVersion>
|
||||
<ProjectVersion>18.6</ProjectVersion>
|
||||
<FrameworkType>VCL</FrameworkType>
|
||||
<MainSource>JWTServer.dpr</MainSource>
|
||||
<Base>True</Base>
|
||||
|
@ -1,7 +1,7 @@
|
||||
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<ProjectGuid>{E7317702-64D3-4A65-8734-030F3AE3DBBC}</ProjectGuid>
|
||||
<ProjectVersion>18.5</ProjectVersion>
|
||||
<ProjectVersion>18.6</ProjectVersion>
|
||||
<FrameworkType>VCL</FrameworkType>
|
||||
<MainSource>JWTClient.dpr</MainSource>
|
||||
<Base>True</Base>
|
||||
|
@ -30,7 +30,8 @@ interface
|
||||
|
||||
uses
|
||||
MVCFramework.Serializer.Intf,
|
||||
System.Rtti;
|
||||
System.Rtti,
|
||||
MVCFramework.Serializer.Commons;
|
||||
|
||||
type
|
||||
// Custom serializer for TUserRoles type
|
||||
@ -43,7 +44,8 @@ type
|
||||
procedure SerializeAttribute(const AElementValue: TValue; const APropertyName: string;
|
||||
const ASerializerObject: TObject; const AAttributes: System.TArray<System.TCustomAttribute>);
|
||||
procedure SerializeRoot(const AObject: TObject; out ASerializerObject: TObject;
|
||||
const AAttributes: System.TArray<System.TCustomAttribute>);
|
||||
const AAttributes: System.TArray<System.TCustomAttribute>;
|
||||
const ASerializationAction: TMVCSerializationAction = nil);
|
||||
procedure DeserializeAttribute(var AElementValue: TValue; const APropertyName: string;
|
||||
const ASerializerObject: TObject; const AAttributes: System.TArray<System.TCustomAttribute>);
|
||||
procedure DeserializeRoot(const ASerializerObject: TObject; const AObject: TObject;
|
||||
@ -60,7 +62,8 @@ type
|
||||
procedure SerializeAttribute(const AElementValue: TValue; const APropertyName: string;
|
||||
const ASerializerObject: TObject; const AAttributes: System.TArray<System.TCustomAttribute>);
|
||||
procedure SerializeRoot(const AObject: TObject; out ASerializerObject: TObject;
|
||||
const AAttributes: System.TArray<System.TCustomAttribute>);
|
||||
const AAttributes: System.TArray<System.TCustomAttribute>;
|
||||
const ASerializationAction: TMVCSerializationAction);
|
||||
procedure DeserializeAttribute(var AElementValue: TValue; const APropertyName: string;
|
||||
const ASerializerObject: TObject; const AAttributes: System.TArray<System.TCustomAttribute>);
|
||||
procedure DeserializeRoot(const ASerializerObject: TObject; const AObject: TObject;
|
||||
@ -70,12 +73,15 @@ type
|
||||
implementation
|
||||
|
||||
uses
|
||||
JsonDataObjects, CustomTypesU, MVCFramework.Serializer.JsonDataObjects,
|
||||
System.SysUtils, MVCFramework.Serializer.Commons;
|
||||
JsonDataObjects,
|
||||
CustomTypesU,
|
||||
MVCFramework.Serializer.JsonDataObjects,
|
||||
System.SysUtils;
|
||||
|
||||
{ TUserPasswordSerializer }
|
||||
|
||||
procedure TUserRolesSerializer.DeserializeAttribute(var AElementValue: TValue; const APropertyName: string;
|
||||
procedure TUserRolesSerializer.DeserializeAttribute(var AElementValue: TValue;
|
||||
const APropertyName: string;
|
||||
const ASerializerObject: TObject; const AAttributes: System.TArray<System.TCustomAttribute>);
|
||||
begin
|
||||
raise Exception.Create('To implement');
|
||||
@ -87,7 +93,8 @@ begin
|
||||
|
||||
end;
|
||||
|
||||
procedure TUserRolesSerializer.SerializeAttribute(const AElementValue: TValue; const APropertyName: string;
|
||||
procedure TUserRolesSerializer.SerializeAttribute(const AElementValue: TValue;
|
||||
const APropertyName: string;
|
||||
const ASerializerObject: TObject; const AAttributes: System.TArray<System.TCustomAttribute>);
|
||||
var
|
||||
lJSONArr: TJDOJsonArray;
|
||||
@ -112,13 +119,15 @@ end;
|
||||
|
||||
{ TNullableAliasSerializer }
|
||||
|
||||
procedure TNullableAliasSerializer.Deserialize(const ASerializedObject: TObject; var AElementValue: TValue;
|
||||
procedure TNullableAliasSerializer.Deserialize(const ASerializedObject: TObject;
|
||||
var AElementValue: TValue;
|
||||
const AAttributes: TArray<TCustomAttribute>);
|
||||
begin
|
||||
|
||||
end;
|
||||
|
||||
procedure TNullableAliasSerializer.DeserializeAttribute(var AElementValue: TValue; const APropertyName: string;
|
||||
procedure TNullableAliasSerializer.DeserializeAttribute(var AElementValue: TValue;
|
||||
const APropertyName: string;
|
||||
const ASerializerObject: TObject; const AAttributes: System.TArray<System.TCustomAttribute>);
|
||||
begin
|
||||
|
||||
@ -130,7 +139,8 @@ begin
|
||||
|
||||
end;
|
||||
|
||||
procedure TNullableAliasSerializer.Serialize(const AElementValue: TValue; var ASerializerObject: TObject;
|
||||
procedure TNullableAliasSerializer.Serialize(const AElementValue: TValue;
|
||||
var ASerializerObject: TObject;
|
||||
const AAttributes: TArray<TCustomAttribute>);
|
||||
begin
|
||||
raise Exception.Create('TODO');
|
||||
@ -138,20 +148,24 @@ begin
|
||||
// TJsonValue(ASerializerObject).Value := AElementValue.AsType<TNullableRecordAlias>.Value;
|
||||
end;
|
||||
|
||||
procedure TNullableAliasSerializer.SerializeAttribute(const AElementValue: TValue; const APropertyName: string;
|
||||
procedure TNullableAliasSerializer.SerializeAttribute(const AElementValue: TValue;
|
||||
const APropertyName: string;
|
||||
const ASerializerObject: TObject; const AAttributes: System.TArray<System.TCustomAttribute>);
|
||||
begin
|
||||
|
||||
end;
|
||||
|
||||
procedure TNullableAliasSerializer.SerializeRoot(const AObject: TObject; out ASerializerObject: TObject;
|
||||
const AAttributes: System.TArray<System.TCustomAttribute>);
|
||||
procedure TNullableAliasSerializer.SerializeRoot(const AObject: TObject;
|
||||
out ASerializerObject: TObject;
|
||||
const AAttributes: System.TArray<System.TCustomAttribute>;
|
||||
const ASerializationAction: TMVCSerializationAction);
|
||||
begin
|
||||
raise EMVCSerializationException.CreateFmt('%s cannot be used as root object', [ClassName]);
|
||||
end;
|
||||
|
||||
procedure TUserRolesSerializer.SerializeRoot(const AObject: TObject; out ASerializerObject: TObject;
|
||||
const AAttributes: System.TArray<System.TCustomAttribute>);
|
||||
const AAttributes: System.TArray<System.TCustomAttribute>;
|
||||
const ASerializationAction: TMVCSerializationAction = nil);
|
||||
begin
|
||||
raise EMVCSerializationException.CreateFmt('%s cannot be used as root object', [ClassName]);
|
||||
end;
|
||||
|
@ -33,6 +33,7 @@ type
|
||||
// useful to identify all the fields that must be serialized
|
||||
// using the custom serializer defined for this type
|
||||
TUserRoles = TArray<string>;
|
||||
|
||||
TNullableRecord<T> = record
|
||||
Value: T;
|
||||
HasValue: Boolean;
|
||||
|
@ -29,12 +29,28 @@ unit MyDataModuleU;
|
||||
interface
|
||||
|
||||
uses
|
||||
System.SysUtils, System.Classes, FireDAC.Stan.Intf, FireDAC.Stan.Option,
|
||||
FireDAC.Stan.Error, FireDAC.UI.Intf, FireDAC.Phys.Intf, FireDAC.Stan.Def,
|
||||
FireDAC.Stan.Pool, FireDAC.Stan.Async, FireDAC.Phys, FireDAC.Phys.FB,
|
||||
FireDAC.Phys.FBDef, FireDAC.Stan.Param, FireDAC.DatS,
|
||||
FireDAC.DApt.Intf, FireDAC.DApt, FireDAC.Phys.IBBase, Data.DB,
|
||||
FireDAC.Comp.DataSet, FireDAC.Comp.Client, FireDAC.ConsoleUI.Wait,
|
||||
System.SysUtils,
|
||||
System.Classes,
|
||||
FireDAC.Stan.Intf,
|
||||
FireDAC.Stan.Option,
|
||||
FireDAC.Stan.Error,
|
||||
FireDAC.UI.Intf,
|
||||
FireDAC.Phys.Intf,
|
||||
FireDAC.Stan.Def,
|
||||
FireDAC.Stan.Pool,
|
||||
FireDAC.Stan.Async,
|
||||
FireDAC.Phys,
|
||||
FireDAC.Phys.FB,
|
||||
FireDAC.Phys.FBDef,
|
||||
FireDAC.Stan.Param,
|
||||
FireDAC.DatS,
|
||||
FireDAC.DApt.Intf,
|
||||
FireDAC.DApt,
|
||||
FireDAC.Phys.IBBase,
|
||||
Data.DB,
|
||||
FireDAC.Comp.DataSet,
|
||||
FireDAC.Comp.Client,
|
||||
FireDAC.ConsoleUI.Wait,
|
||||
FireDAC.Comp.UI,
|
||||
MVCFramework.Serializer.Commons;
|
||||
|
||||
@ -64,7 +80,6 @@ type
|
||||
{ Public declarations }
|
||||
end;
|
||||
|
||||
|
||||
implementation
|
||||
|
||||
{%CLASSGROUP 'Vcl.Controls.TControl'}
|
||||
|
@ -39,13 +39,19 @@ type
|
||||
[MVCPath('/')]
|
||||
TRenderSampleController = class(TMVCController)
|
||||
protected
|
||||
procedure OnBeforeAction(AContext: TWebContext; const AActionName: string; var AHandled: Boolean); override;
|
||||
procedure OnBeforeAction(AContext: TWebContext; const AActionName: string;
|
||||
var AHandled: Boolean); override;
|
||||
public
|
||||
[MVCHTTPMethod([httpGET])]
|
||||
[MVCPath('/customers/($id)')]
|
||||
[MVCProduces('text/plain')]
|
||||
procedure GetPerson_AsText(const id: Integer);
|
||||
|
||||
[MVCHTTPMethod([httpGET])]
|
||||
[MVCPath('/customers/hateoas')]
|
||||
[MVCProduces('application/json')]
|
||||
procedure GetCustomers_AsDataSet_HATEOAS;
|
||||
|
||||
[MVCHTTPMethod([httpGET])]
|
||||
[MVCPath('/customers')]
|
||||
[MVCProduces('application/json')]
|
||||
@ -66,11 +72,21 @@ type
|
||||
[MVCProduces('application/json')]
|
||||
procedure GetPeople_AsObjectList;
|
||||
|
||||
[MVCHTTPMethod([httpGET])]
|
||||
[MVCPath('/people/hateoas')]
|
||||
[MVCProduces('application/json')]
|
||||
procedure GetPeople_AsObjectList_HATEOAS;
|
||||
|
||||
[MVCHTTPMethod([httpGET])]
|
||||
[MVCPath('/people/withtiming')]
|
||||
[MVCProduces('application/json')]
|
||||
procedure GetPeopleWithTiming;
|
||||
|
||||
[MVCHTTPMethod([httpGET])]
|
||||
[MVCPath('/people/($id)')]
|
||||
[MVCProduces('application/json')]
|
||||
procedure GetPersonById(const id: Integer);
|
||||
|
||||
[MVCHTTPMethod([httpGET])]
|
||||
[MVCPath('/lotofobjects')]
|
||||
procedure GetLotOfPeople;
|
||||
@ -144,7 +160,8 @@ uses
|
||||
CustomTypesU,
|
||||
InMemoryDataU,
|
||||
JsonDataObjects,
|
||||
MVCFramework.Serializer.JsonDataObjects;
|
||||
MVCFramework.Serializer.JsonDataObjects,
|
||||
Data.DB;
|
||||
|
||||
{ TRoutingSampleController }
|
||||
|
||||
@ -210,7 +227,8 @@ begin
|
||||
// We need a non standard representation, let's create a specific serializer.
|
||||
lSer := TMVCJsonDataObjectsSerializer.Create;
|
||||
try
|
||||
lSer.DataSetToJsonArray(lDM.qryCustomers, lJObj.a['customers'], TMVCNameCase.ncLowerCase, []);
|
||||
lSer.DataSetToJsonArray(lDM.qryCustomers, lJObj.a['customers'],
|
||||
TMVCNameCase.ncLowerCase, []);
|
||||
lSer.DataSetToJsonArray(lDM.qryCountry, lJObj.a['countries'], TMVCNameCase.ncLowerCase, []);
|
||||
finally
|
||||
lSer.Free;
|
||||
@ -238,6 +256,23 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TRenderSampleController.GetCustomers_AsDataSet_HATEOAS;
|
||||
var
|
||||
lDM: TMyDataModule;
|
||||
begin
|
||||
lDM := TMyDataModule.Create(nil);
|
||||
try
|
||||
lDM.qryCustomers.Open;
|
||||
Render(lDM.qryCustomers, False,
|
||||
procedure(const DS: TDataset; const Links: TMVCStringDictionary)
|
||||
begin
|
||||
Links['x-ref'] := '/api/customers/' + DS.FieldByName('cust_no').AsString;
|
||||
end);
|
||||
finally
|
||||
lDM.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TRenderSampleController.GetCustomSerializationType;
|
||||
begin
|
||||
// TSysUser contains a type with a custom serializer
|
||||
@ -253,8 +288,8 @@ begin
|
||||
try
|
||||
lDM.qryCustomers.Open;
|
||||
lHolder := TDataSetHolder.Create(lDM.qryCustomers);
|
||||
lHolder.Metadata.AddProperty('page', '1');
|
||||
lHolder.Metadata.AddProperty('count', lDM.qryCustomers.RecordCount.ToString);
|
||||
lHolder.Metadata.Add('page', '1');
|
||||
lHolder.Metadata.Add('count', lDM.qryCustomers.RecordCount.ToString);
|
||||
Render(lHolder);
|
||||
finally
|
||||
lDM.Free;
|
||||
@ -269,8 +304,10 @@ end;
|
||||
|
||||
procedure TRenderSampleController.GetPerson_AsHTML(CTX: TWebContext);
|
||||
begin
|
||||
ResponseStream.Append('<html><body><ul>').Append('<li>FirstName: Daniele</li>').Append('<li>LastName: Teti')
|
||||
.AppendFormat('<li>DOB: %s</li>', [DateToISODate(EncodeDate(1975, 5, 2))]).Append('<li>Married: yes</li>')
|
||||
ResponseStream.Append('<html><body><ul>').Append('<li>FirstName: Daniele</li>')
|
||||
.Append('<li>LastName: Teti')
|
||||
.AppendFormat('<li>DOB: %s</li>', [DateToISODate(EncodeDate(1975, 5, 2))])
|
||||
.Append('<li>Married: yes</li>')
|
||||
.Append('</ul></body></html>');
|
||||
RenderResponseStream;
|
||||
end;
|
||||
@ -300,8 +337,11 @@ end;
|
||||
|
||||
procedure TRenderSampleController.GetPerson_AsText(const id: Integer);
|
||||
begin
|
||||
ResponseStream.AppendLine('ID : ' + id.ToString).AppendLine('FirstName : Daniele')
|
||||
.AppendLine('LastName : Teti').AppendLine('DOB : ' + DateToStr(EncodeDate(1979, 5, 2)))
|
||||
ResponseStream
|
||||
.AppendLine('ID : ' + id.ToString)
|
||||
.AppendLine('FirstName : Daniele')
|
||||
.AppendLine('LastName : Teti')
|
||||
.AppendLine('DOB : ' + DateToStr(EncodeDate(1979, 5, 2)))
|
||||
.AppendLine('Married : yes');
|
||||
RenderResponseStream;
|
||||
end;
|
||||
@ -419,16 +459,76 @@ begin
|
||||
Render<TPerson>(People);
|
||||
end;
|
||||
|
||||
procedure TRenderSampleController.GetPeople_AsObjectList_HATEOAS;
|
||||
var
|
||||
p: TPerson;
|
||||
People: TObjectList<TPerson>;
|
||||
begin
|
||||
People := TObjectList<TPerson>.Create(True);
|
||||
|
||||
{$REGION 'Fake data'}
|
||||
p := TPerson.Create;
|
||||
p.FirstName := 'Daniele';
|
||||
p.LastName := 'Teti';
|
||||
p.DOB := EncodeDate(1979, 11, 4);
|
||||
p.Married := True;
|
||||
People.Add(p);
|
||||
|
||||
p := TPerson.Create;
|
||||
p.FirstName := 'John';
|
||||
p.LastName := 'Doe';
|
||||
p.DOB := EncodeDate(1879, 10, 2);
|
||||
p.Married := False;
|
||||
People.Add(p);
|
||||
|
||||
p := TPerson.Create;
|
||||
p.FirstName := 'Jane';
|
||||
p.LastName := 'Doe';
|
||||
p.DOB := EncodeDate(1883, 1, 5);
|
||||
p.Married := True;
|
||||
People.Add(p);
|
||||
|
||||
{$ENDREGION}
|
||||
Render<TPerson>(People, True,
|
||||
procedure(const APerson: TPerson; const Dict: TMVCStringDictionary)
|
||||
begin
|
||||
Dict['ref'] := '/api/people/' + APerson.LastName;
|
||||
Dict['x-ref'] := '/api/people/' + APerson.LastName;
|
||||
end);
|
||||
end;
|
||||
|
||||
procedure TRenderSampleController.GetPersonById(const id: Integer);
|
||||
var
|
||||
lPerson: TPerson;
|
||||
begin
|
||||
lPerson := TPerson.Create;
|
||||
try
|
||||
lPerson.id := id;
|
||||
lPerson.FirstName := 'Daniele';
|
||||
lPerson.LastName := 'Daniele';
|
||||
lPerson.DOB := EncodeDate(1979, 11, 4);
|
||||
lPerson.Married := True;
|
||||
Render(lPerson, False,
|
||||
procedure(const AObject: TObject; const Links: TMVCStringDictionary)
|
||||
begin
|
||||
Links['x-self'] := '/people/' + TPerson(AObject).id.ToString;
|
||||
Links['x-self-list'] := '/people';
|
||||
end);
|
||||
finally
|
||||
lPerson.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TRenderSampleController.GetPersonJSON;
|
||||
var
|
||||
p: TJSONObject;
|
||||
lJSONPerson: TJSONObject;
|
||||
begin
|
||||
p := TJSONObject.Create;
|
||||
p.s['FirstName'] := 'Daniele';
|
||||
p.s['LastName'] := 'Teti';
|
||||
p.s['DOB'] := DateToISODate(EncodeDate(1975, 5, 2));
|
||||
p.B['Married'] := True;
|
||||
Render(p);
|
||||
lJSONPerson := TJSONObject.Create;
|
||||
lJSONPerson.s['FirstName'] := 'Daniele';
|
||||
lJSONPerson.s['LastName'] := 'Teti';
|
||||
lJSONPerson.s['DOB'] := DateToISODate(EncodeDate(1975, 5, 2));
|
||||
lJSONPerson.B['Married'] := True;
|
||||
Render(lJSONPerson);
|
||||
end;
|
||||
|
||||
procedure TRenderSampleController.GetPersonPhoto;
|
||||
|
@ -29,12 +29,29 @@ unit WebModuleU;
|
||||
interface
|
||||
|
||||
uses
|
||||
System.SysUtils, System.Classes,
|
||||
Web.HTTPApp, MVCFramework, FireDAC.Stan.Intf, FireDAC.Stan.Option,
|
||||
FireDAC.Stan.Error, FireDAC.UI.Intf, FireDAC.Phys.Intf, FireDAC.Stan.Def,
|
||||
FireDAC.Stan.Pool, FireDAC.Stan.Async, FireDAC.Phys, FireDAC.Stan.Param,
|
||||
FireDAC.DatS, FireDAC.DApt.Intf, FireDAC.DApt, Data.DB, FireDAC.Comp.DataSet,
|
||||
FireDAC.Comp.Client, FireDAC.Phys.IBBase, FireDAC.Phys.IB, FireDAC.Phys.FB,
|
||||
System.SysUtils,
|
||||
System.Classes,
|
||||
Web.HTTPApp,
|
||||
MVCFramework,
|
||||
FireDAC.Stan.Intf,
|
||||
FireDAC.Stan.Option,
|
||||
FireDAC.Stan.Error,
|
||||
FireDAC.UI.Intf,
|
||||
FireDAC.Phys.Intf,
|
||||
FireDAC.Stan.Def,
|
||||
FireDAC.Stan.Pool,
|
||||
FireDAC.Stan.Async,
|
||||
FireDAC.Phys,
|
||||
FireDAC.Stan.Param,
|
||||
FireDAC.DatS,
|
||||
FireDAC.DApt.Intf,
|
||||
FireDAC.DApt,
|
||||
Data.DB,
|
||||
FireDAC.Comp.DataSet,
|
||||
FireDAC.Comp.Client,
|
||||
FireDAC.Phys.IBBase,
|
||||
FireDAC.Phys.IB,
|
||||
FireDAC.Phys.FB,
|
||||
FireDAC.Phys.FBDef;
|
||||
|
||||
type
|
||||
@ -51,6 +68,7 @@ implementation
|
||||
|
||||
{$R *.dfm}
|
||||
|
||||
|
||||
uses
|
||||
MVCFramework.Commons,
|
||||
RenderSampleControllerU,
|
||||
|
@ -28,6 +28,7 @@ program renders;
|
||||
|
||||
{$APPTYPE CONSOLE}
|
||||
|
||||
|
||||
uses
|
||||
System.SysUtils,
|
||||
IdHTTPWebBrokerBridge,
|
||||
@ -35,10 +36,10 @@ uses
|
||||
Web.WebReq,
|
||||
Web.WebBroker,
|
||||
MVCFramework.Console,
|
||||
WebModuleU in 'WebModuleU.pas' {WebModule1: TWebModule},
|
||||
WebModuleU in 'WebModuleU.pas' {WebModule1: TWebModule} ,
|
||||
RenderSampleControllerU in 'RenderSampleControllerU.pas',
|
||||
BusinessObjectsU in '..\commons\BusinessObjectsU.pas',
|
||||
MyDataModuleU in 'MyDataModuleU.pas' {MyDataModule: TDataModule},
|
||||
MyDataModuleU in 'MyDataModuleU.pas' {MyDataModule: TDataModule} ,
|
||||
CustomTypesU in 'CustomTypesU.pas',
|
||||
CustomTypesSerializersU in 'CustomTypesSerializersU.pas',
|
||||
InMemoryDataU in 'InMemoryDataU.pas',
|
||||
@ -47,6 +48,7 @@ uses
|
||||
|
||||
{$R *.res}
|
||||
|
||||
|
||||
procedure RunServer(APort: Integer);
|
||||
var
|
||||
LServer: TIdHTTPWebBrokerBridge;
|
||||
|
@ -327,37 +327,37 @@
|
||||
<Overwrite>true</Overwrite>
|
||||
</Platform>
|
||||
</DeployFile>
|
||||
<DeployFile LocalName="ModelSupport_renders\renders\default.txaPackage" Configuration="Debug" Class="ProjectFile">
|
||||
<Platform Name="Win32">
|
||||
<RemoteDir>.\</RemoteDir>
|
||||
<Overwrite>true</Overwrite>
|
||||
</Platform>
|
||||
</DeployFile>
|
||||
<DeployFile LocalName="ModelSupport_renders\renders\default.txvpck" Configuration="Debug" Class="ProjectFile">
|
||||
<Platform Name="Linux64">
|
||||
<RemoteDir>.\</RemoteDir>
|
||||
<Overwrite>true</Overwrite>
|
||||
</Platform>
|
||||
</DeployFile>
|
||||
<DeployFile LocalName="ModelSupport_renders\RenderSampleControllerU\default.txaPackage" Configuration="Release" Class="ProjectFile">
|
||||
<Platform Name="Win32">
|
||||
<RemoteDir>.\</RemoteDir>
|
||||
<Overwrite>true</Overwrite>
|
||||
</Platform>
|
||||
</DeployFile>
|
||||
<DeployFile LocalName="ModelSupport_renders\renders1\default.txvpck" Configuration="Release" Class="ProjectFile">
|
||||
<Platform Name="Win32">
|
||||
<RemoteDir>.\</RemoteDir>
|
||||
<Overwrite>true</Overwrite>
|
||||
</Platform>
|
||||
</DeployFile>
|
||||
<DeployFile LocalName="ModelSupport_renders\renders\default.txvpck" Configuration="Release" Class="ProjectFile">
|
||||
<Platform Name="Win32">
|
||||
<RemoteDir>.\</RemoteDir>
|
||||
<Overwrite>true</Overwrite>
|
||||
</Platform>
|
||||
</DeployFile>
|
||||
<DeployFile LocalName="bin\renders.exe" Configuration="Release" Class="ProjectOutput">
|
||||
<Platform Name="Win32">
|
||||
<RemoteName>renders.exe</RemoteName>
|
||||
<Overwrite>true</Overwrite>
|
||||
</Platform>
|
||||
</DeployFile>
|
||||
<DeployFile LocalName="ModelSupport_renders\renders\default.txvpck" Configuration="Debug" Class="ProjectFile">
|
||||
<Platform Name="Linux64">
|
||||
<DeployFile LocalName="ModelSupport_renders\renders1\default.txvpck" Configuration="Release" Class="ProjectFile">
|
||||
<Platform Name="Win32">
|
||||
<RemoteDir>.\</RemoteDir>
|
||||
<Overwrite>true</Overwrite>
|
||||
</Platform>
|
||||
</DeployFile>
|
||||
<DeployFile LocalName="ModelSupport_renders\renders\default.txaPackage" Configuration="Debug" Class="ProjectFile">
|
||||
<DeployFile LocalName="ModelSupport_renders\renders\default.txvpck" Configuration="Release" Class="ProjectFile">
|
||||
<Platform Name="Win32">
|
||||
<RemoteDir>.\</RemoteDir>
|
||||
<Overwrite>true</Overwrite>
|
||||
|
@ -28,7 +28,7 @@ interface
|
||||
|
||||
uses
|
||||
MVCFramework.Serializer.Intf,
|
||||
System.Rtti;
|
||||
System.Rtti, MVCFramework.Serializer.Commons;
|
||||
|
||||
type
|
||||
// Custom serializer for TNullableAliasSerializer type
|
||||
@ -43,7 +43,8 @@ type
|
||||
procedure SerializeRoot(
|
||||
const AObject: TObject;
|
||||
out ASerializerObject: TObject;
|
||||
const AAttributes: TArray<TCustomAttribute>
|
||||
const AAttributes: TArray<TCustomAttribute>;
|
||||
const ASerializationAction: TMVCSerializationAction = nil
|
||||
);
|
||||
|
||||
procedure DeserializeAttribute(
|
||||
@ -77,7 +78,8 @@ type
|
||||
procedure SerializeRoot(
|
||||
const AObject: TObject;
|
||||
out ASerializerObject: TObject;
|
||||
const AAttributes: TArray<TCustomAttribute>
|
||||
const AAttributes: TArray<TCustomAttribute>;
|
||||
const ASerializationAction: TMVCSerializationAction = nil
|
||||
);
|
||||
|
||||
procedure DeserializeAttribute(
|
||||
@ -111,7 +113,8 @@ type
|
||||
procedure SerializeRoot(
|
||||
const AObject: TObject;
|
||||
out ASerializerObject: TObject;
|
||||
const AAttributes: TArray<TCustomAttribute>
|
||||
const AAttributes: TArray<TCustomAttribute>;
|
||||
const ASerializationAction: TMVCSerializationAction = nil
|
||||
);
|
||||
|
||||
procedure DeserializeAttribute(
|
||||
@ -145,7 +148,8 @@ type
|
||||
procedure SerializeRoot(
|
||||
const AObject: TObject;
|
||||
out ASerializerObject: TObject;
|
||||
const AAttributes: TArray<TCustomAttribute>
|
||||
const AAttributes: TArray<TCustomAttribute>;
|
||||
const ASerializationAction: TMVCSerializationAction = nil
|
||||
);
|
||||
|
||||
procedure DeserializeAttribute(
|
||||
@ -173,8 +177,7 @@ uses
|
||||
Spring,
|
||||
MVCFramework.Serializer.JsonDataObjects,
|
||||
BusinessObjectsU,
|
||||
System.SysUtils,
|
||||
MVCFramework.Serializer.Commons;
|
||||
System.SysUtils;
|
||||
|
||||
procedure TNullableIntegerSerializer.Deserialize(const ASerializedObject: TObject;
|
||||
var AElementValue: TValue; const AAttributes: TArray<TCustomAttribute>);
|
||||
@ -224,8 +227,12 @@ begin
|
||||
(ASerializerObject as TJDOJsonObject).Values[APropertyName] := nil;
|
||||
end;
|
||||
|
||||
procedure TNullableIntegerSerializer.SerializeRoot(const AObject: TObject;
|
||||
out ASerializerObject: TObject; const AAttributes: TArray<TCustomAttribute>);
|
||||
procedure TNullableIntegerSerializer.SerializeRoot(
|
||||
const AObject: TObject;
|
||||
out ASerializerObject: TObject;
|
||||
const AAttributes: TArray<TCustomAttribute>;
|
||||
const ASerializationAction: TMVCSerializationAction = nil
|
||||
);
|
||||
begin
|
||||
raise EMVCSerializationException.Create('Not supported');
|
||||
end;
|
||||
@ -281,8 +288,12 @@ begin
|
||||
(ASerializerObject as TJDOJsonObject).Values[APropertyName] := nil;
|
||||
end;
|
||||
|
||||
procedure TNullableCurrencySerializer.SerializeRoot(const AObject: TObject;
|
||||
out ASerializerObject: TObject; const AAttributes: TArray<TCustomAttribute>);
|
||||
procedure TNullableCurrencySerializer.SerializeRoot(
|
||||
const AObject: TObject;
|
||||
out ASerializerObject: TObject;
|
||||
const AAttributes: TArray<TCustomAttribute>;
|
||||
const ASerializationAction: TMVCSerializationAction = nil
|
||||
);
|
||||
begin
|
||||
raise EMVCSerializationException.Create('Not supported');
|
||||
end;
|
||||
@ -338,8 +349,12 @@ begin
|
||||
(ASerializerObject as TJDOJsonObject).Values[APropertyName] := nil;
|
||||
end;
|
||||
|
||||
procedure TNullableStringSerializer.SerializeRoot(const AObject: TObject;
|
||||
out ASerializerObject: TObject; const AAttributes: TArray<TCustomAttribute>);
|
||||
procedure TNullableStringSerializer.SerializeRoot(
|
||||
const AObject: TObject;
|
||||
out ASerializerObject: TObject;
|
||||
const AAttributes: TArray<TCustomAttribute>;
|
||||
const ASerializationAction: TMVCSerializationAction = nil
|
||||
);
|
||||
begin
|
||||
raise EMVCSerializationException.Create('Not supported');
|
||||
end;
|
||||
@ -382,8 +397,12 @@ begin
|
||||
TJDOJsonObject(ASerializerObject).O[APropertyName] := lJSON;
|
||||
end;
|
||||
|
||||
procedure TPersonSerializer.SerializeRoot(const AObject: TObject;
|
||||
out ASerializerObject: TObject; const AAttributes: TArray<TCustomAttribute>);
|
||||
procedure TPersonSerializer.SerializeRoot(
|
||||
const AObject: TObject;
|
||||
out ASerializerObject: TObject;
|
||||
const AAttributes: TArray<TCustomAttribute>;
|
||||
const ASerializationAction: TMVCSerializationAction = nil
|
||||
);
|
||||
var
|
||||
lPerson: TPerson;
|
||||
lJSON: TJDOJsonObject;
|
||||
|
@ -63,9 +63,9 @@ var
|
||||
lDict: TMVCStringDictionary;
|
||||
begin
|
||||
lDict := TMVCStringDictionary.Create;
|
||||
lDict.AddProperty('prop1', 'one');
|
||||
lDict.AddProperty('prop2', 'two');
|
||||
lDict.AddProperty('prop3', 'three');
|
||||
lDict.Add('prop1', 'one');
|
||||
lDict.Add('prop2', 'two');
|
||||
lDict.Add('prop3', 'three');
|
||||
Render(lDict);
|
||||
end;
|
||||
|
||||
|
@ -153,7 +153,7 @@ begin
|
||||
|
||||
lResp := TMVCActiveRecordListResponse.Create(TMVCActiveRecord.SelectRQL(lARClassRef, lRQL, GetMaxRecordCount), True);
|
||||
try
|
||||
lResp.Metadata.AddProperty('count', lResp.Items.Count.ToString);
|
||||
lResp.Metadata.Add('count', lResp.Items.Count.ToString);
|
||||
Render(lResp);
|
||||
except
|
||||
lResp.Free;
|
||||
|
@ -31,11 +31,12 @@ unit MVCFramework.Commons;
|
||||
interface
|
||||
|
||||
uses
|
||||
System.Classes,
|
||||
System.SysUtils,
|
||||
System.SyncObjs,
|
||||
System.IOUtils,
|
||||
System.Generics.Collections,
|
||||
System.JSON,
|
||||
// System.JSON,
|
||||
Data.DB,
|
||||
IdGlobal,
|
||||
IdCoderMIME;
|
||||
@ -71,8 +72,8 @@ type
|
||||
IMAGE_JPEG = 'image/jpeg';
|
||||
IMAGE_X_PNG = 'image/x-png';
|
||||
IMAGE_PNG = 'image/png';
|
||||
APPLICATION_PDF = 'application/pdf';
|
||||
APPLICATION_X_PDF = 'application/x-pdf';
|
||||
APPLICATION_PDF = 'application/pdf';
|
||||
APPLICATION_X_PDF = 'application/x-pdf';
|
||||
WILDCARD = '*/*';
|
||||
end;
|
||||
|
||||
@ -113,6 +114,7 @@ type
|
||||
OneMiB = 1048576;
|
||||
OneKiB = 1024;
|
||||
DEFAULT_MAX_REQUEST_SIZE = OneMiB * 5; // 5 MiB
|
||||
HATEOS_PROP_NAME = '_links';
|
||||
end;
|
||||
|
||||
TMVCConfigKey = record
|
||||
@ -133,6 +135,7 @@ type
|
||||
FallbackResource = 'fallback_resource';
|
||||
MaxEntitiesRecordCount = 'max_entities_record_count';
|
||||
MaxRequestSize = 'max_request_size'; // bytes
|
||||
HATEOSPropertyName = 'hateos';
|
||||
end;
|
||||
|
||||
// http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
|
||||
@ -354,12 +357,13 @@ type
|
||||
constructor Create; virtual;
|
||||
destructor Destroy; override;
|
||||
procedure Clear;
|
||||
function AddProperty(const Name, Value: string): TMVCStringDictionary;
|
||||
function Add(const Name, Value: string): TMVCStringDictionary;
|
||||
function TryGetValue(const Name: string; out Value: string): Boolean; overload;
|
||||
function TryGetValue(const Name: string; out Value: Integer): Boolean; overload;
|
||||
function Count: Integer;
|
||||
function GetEnumerator: TDictionary<string, string>.TPairEnumerator;
|
||||
function ContainsKey(const Key: string): Boolean;
|
||||
function Keys: TArray<String>;
|
||||
property Items[const Key: string]: string read GetItems write SetItems; default;
|
||||
end;
|
||||
|
||||
@ -408,7 +412,7 @@ type
|
||||
|
||||
TMVCConfig = class sealed
|
||||
private
|
||||
FConfig: TDictionary<string, string>;
|
||||
FConfig: TMVCStringDictionary;
|
||||
|
||||
function GetValue(const AIndex: string): string;
|
||||
function GetValueAsInt64(const AIndex: string): Int64;
|
||||
@ -428,6 +432,11 @@ type
|
||||
property AsInt64[const AIndex: string]: Int64 read GetValueAsInt64;
|
||||
end;
|
||||
|
||||
TMVCStreamHelper = class helper for TStream
|
||||
public
|
||||
procedure WriteUTF8(const AString: string);
|
||||
end;
|
||||
|
||||
TMVCFieldMap = record
|
||||
InstanceFieldName: string;
|
||||
DatabaseFieldName: string;
|
||||
@ -479,7 +488,7 @@ const
|
||||
implementation
|
||||
|
||||
uses
|
||||
IdCoder3to4;
|
||||
IdCoder3to4, JsonDataObjects, MVCFramework.Serializer.JsonDataObjects;
|
||||
|
||||
var
|
||||
GlobalAppName, GlobalAppPath, GlobalAppExe: string;
|
||||
@ -674,7 +683,7 @@ end;
|
||||
constructor TMVCConfig.Create;
|
||||
begin
|
||||
inherited Create;
|
||||
FConfig := TDictionary<string, string>.Create;
|
||||
FConfig := TMVCStringDictionary.Create;
|
||||
end;
|
||||
|
||||
destructor TMVCConfig.Destroy;
|
||||
@ -698,40 +707,29 @@ end;
|
||||
|
||||
function TMVCConfig.Keys: TArray<string>;
|
||||
begin
|
||||
Result := FConfig.Keys.ToArray;
|
||||
Result := FConfig.Keys;
|
||||
end;
|
||||
|
||||
procedure TMVCConfig.LoadFromFile(const AFileName: string);
|
||||
var
|
||||
S: string;
|
||||
Jo: TJSONObject;
|
||||
P: TJSONPair;
|
||||
lJConfig: TJSONValue;
|
||||
I: Integer;
|
||||
lConfigString: string;
|
||||
lStreamReader: TStreamReader;
|
||||
lSer: TMVCJsonDataObjectsSerializer;
|
||||
begin
|
||||
{ TODO -oEzequiel -cRefactoring : Replace for custom serializers }
|
||||
S := TFile.ReadAllText(AFileName);
|
||||
lJConfig := TJSONObject.ParseJSONValue(S);
|
||||
lStreamReader := TStreamReader.Create(TFileStream.Create(AFileName, fmOpenRead or fmShareDenyWrite), TEncoding.ASCII);
|
||||
try
|
||||
if Assigned(lJConfig) then
|
||||
begin
|
||||
if lJConfig is TJSONObject then
|
||||
begin
|
||||
Jo := TJSONObject(lJConfig);
|
||||
for I := 0 to Jo.Count - 1 do
|
||||
begin
|
||||
P := Jo.Pairs[I];
|
||||
FConfig.AddOrSetValue(P.JsonString.Value, P.JsonValue.Value);
|
||||
end
|
||||
end
|
||||
else
|
||||
raise EMVCConfigException.Create('DMVCFramework configuration file [' + AFileName +
|
||||
'] does not contain a valid JSONObject');
|
||||
end
|
||||
else
|
||||
raise EMVCConfigException.Create('Cannot load DMVCFramework configuration file [' + AFileName + ']');
|
||||
lStreamReader.OwnStream;
|
||||
lConfigString := lStreamReader.ReadToEnd;
|
||||
finally
|
||||
lJConfig.Free;
|
||||
lStreamReader.Free;
|
||||
end;
|
||||
|
||||
lSer := TMVCJsonDataObjectsSerializer.Create;
|
||||
try
|
||||
FConfig.Clear;
|
||||
lSer.DeserializeObject(lConfigString, FConfig);
|
||||
finally
|
||||
lSer.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
@ -742,35 +740,24 @@ end;
|
||||
|
||||
procedure TMVCConfig.SetValue(const AIndex, AValue: string);
|
||||
begin
|
||||
FConfig.AddOrSetValue(AIndex, AValue);
|
||||
FConfig.Add(AIndex, AValue);
|
||||
end;
|
||||
|
||||
function TMVCConfig.ToString: string;
|
||||
var
|
||||
S: string;
|
||||
Jo: TJSONObject;
|
||||
lSer: TMVCJsonDataObjectsSerializer;
|
||||
begin
|
||||
{ TODO -oEzequiel -cRefactoring : Replace for custom serializers }
|
||||
Jo := TJSONObject.Create;
|
||||
lSer := TMVCJsonDataObjectsSerializer.Create;
|
||||
try
|
||||
for S in FConfig.Keys do
|
||||
Jo.AddPair(S, FConfig[S]);
|
||||
|
||||
{$IFDEF SYSTEMJSON}
|
||||
Result := Jo.ToJSON;
|
||||
|
||||
{$ELSE}
|
||||
Result := Jo.ToString;
|
||||
|
||||
{$ENDIF}
|
||||
Result := lSer.SerializeObject(FConfig);
|
||||
finally
|
||||
Jo.Free;
|
||||
lSer.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
{ TMVCStringDictionary }
|
||||
|
||||
function TMVCStringDictionary.AddProperty(const Name, Value: string): TMVCStringDictionary;
|
||||
function TMVCStringDictionary.Add(const Name, Value: string): TMVCStringDictionary;
|
||||
begin
|
||||
FDict.AddOrSetValue(name, Value);
|
||||
Result := Self;
|
||||
@ -814,6 +801,11 @@ begin
|
||||
FDict.TryGetValue(Key, Result);
|
||||
end;
|
||||
|
||||
function TMVCStringDictionary.Keys: TArray<String>;
|
||||
begin
|
||||
Result := FDict.Keys.ToArray;
|
||||
end;
|
||||
|
||||
procedure TMVCStringDictionary.SetItems(const Key, Value: string);
|
||||
begin
|
||||
FDict.AddOrSetValue(Key, Value);
|
||||
@ -982,6 +974,16 @@ begin
|
||||
inherited Create([]);
|
||||
end;
|
||||
|
||||
{ TMVCStreamHelper }
|
||||
|
||||
procedure TMVCStreamHelper.WriteUTF8(const AString: string);
|
||||
var
|
||||
UFTStr: UTF8String;
|
||||
begin
|
||||
UFTStr := UTF8String(AString);
|
||||
Self.WriteBuffer(UFTStr[Low(UFTStr)], Length(UFTStr));
|
||||
end;
|
||||
|
||||
initialization
|
||||
|
||||
Lock := TObject.Create;
|
||||
|
@ -43,12 +43,14 @@ type
|
||||
|
||||
TDataSetHelper = class helper for TDataSet
|
||||
public
|
||||
procedure LoadFromTValue(const Value: TValue; const aNameCase: TMVCNameCase = TMVCNameCase.ncLowerCase);
|
||||
function AsJSONArray( AIgnoredFields: TArray<string> = nil): string;
|
||||
procedure LoadFromTValue(const Value: TValue;
|
||||
const aNameCase: TMVCNameCase = TMVCNameCase.ncLowerCase);
|
||||
function AsJSONArray: string;
|
||||
function AsJSONArrayString: string; deprecated 'Use AsJSONArray';
|
||||
function AsJSONObject(AFieldNamePolicy: TFieldNamePolicy = fpLowerCase; AIgnoredFields: TArray<string> = nil): string;
|
||||
function AsJSONObject(AFieldNamePolicy: TFieldNamePolicy = fpLowerCase): string;
|
||||
function AsJSONObjectString: string; deprecated 'Use AsJSONObject';
|
||||
procedure LoadFromJSONObject(AJSONObject: TJSONObject; AFieldNamePolicy: TFieldNamePolicy = fpLowerCase); overload;
|
||||
procedure LoadFromJSONObject(AJSONObject: TJSONObject;
|
||||
AFieldNamePolicy: TFieldNamePolicy = fpLowerCase); overload;
|
||||
procedure LoadFromJSONObject(AJSONObject: TJSONObject; AIgnoredFields: TArray<string>;
|
||||
AFieldNamePolicy: TFieldNamePolicy = fpLowerCase); overload;
|
||||
procedure LoadFromJSONArray(AJSONArray: string;
|
||||
@ -57,17 +59,19 @@ type
|
||||
AFieldNamePolicy: TFieldNamePolicy = TFieldNamePolicy.fpLowerCase); overload;
|
||||
procedure LoadFromJSONArrayString(AJSONArrayString: string;
|
||||
AFieldNamePolicy: TFieldNamePolicy = TFieldNamePolicy.fpLowerCase); overload;
|
||||
procedure LoadFromJSONArrayStringItems(AJSONArrayString: string;
|
||||
AFieldNamePolicy: TFieldNamePolicy = TFieldNamePolicy.fpLowerCase); overload;
|
||||
procedure LoadFromJSONArray(AJSONArray: TJSONArray;
|
||||
AFieldNamePolicy: TFieldNamePolicy = TFieldNamePolicy.fpLowerCase); overload;
|
||||
procedure LoadFromJSONObjectString(AJSONObjectString: string); overload;
|
||||
procedure LoadFromJSONObjectString(AJSONObjectString: string; AIgnoredFields: TArray<string>); overload;
|
||||
procedure LoadFromJSONObjectString(AJSONObjectString: string;
|
||||
AIgnoredFields: TArray<string>); overload;
|
||||
procedure AppendFromJSONArrayString(AJSONArrayString: string); overload;
|
||||
procedure AppendFromJSONArrayString(AJSONArrayString: string; AIgnoredFields: TArray<string>;
|
||||
AFieldNamePolicy: TFieldNamePolicy = TFieldNamePolicy.fpLowerCase); overload;
|
||||
function AsObjectList<T: class, constructor>(CloseAfterScroll: boolean = false; OwnsObjects: boolean = true): TObjectList<T>;
|
||||
function AsObjectList<T: class, constructor>(CloseAfterScroll: boolean = false;
|
||||
OwnsObjects: boolean = true): TObjectList<T>;
|
||||
function AsObject<T: class, constructor>(CloseAfterScroll: boolean = false): T;
|
||||
procedure LoadFromJSONArrayStringItems(AJSONArrayString: string;
|
||||
AFieldNamePolicy: TFieldNamePolicy = TFieldNamePolicy.fpLowerCase);
|
||||
end;
|
||||
|
||||
TDataSetUtils = class sealed
|
||||
@ -77,8 +81,9 @@ type
|
||||
class constructor Create;
|
||||
class destructor Destroy;
|
||||
class procedure DataSetToObject(ADataSet: TDataSet; AObject: TObject);
|
||||
class procedure DataSetToObjectList<T: class, constructor>(ADataSet: TDataSet; AObjectList: TObjectList<T>;
|
||||
ACloseDataSetAfterScroll: boolean = True);
|
||||
class procedure DataSetToObjectList<T: class, constructor>(ADataSet: TDataSet;
|
||||
AObjectList: TObjectList<T>;
|
||||
ACloseDataSetAfterScroll: boolean = true);
|
||||
end;
|
||||
|
||||
[MVCNameCase(ncLowerCase)]
|
||||
@ -106,7 +111,8 @@ procedure TDataSetHelper.LoadFromTValue(const Value: TValue; const aNameCase: TM
|
||||
var
|
||||
lSer: TMVCJsonDataObjectsSerializer;
|
||||
begin
|
||||
if not({$IFDEF TOKYOORBETTER}Value.IsObjectInstance and {$ENDIF} (Value.AsObject is TJSONArray)) then
|
||||
if not({$IFDEF TOKYOORBETTER}Value.IsObjectInstance and
|
||||
{$ENDIF} (Value.AsObject is TJSONArray)) then
|
||||
raise Exception.Create('LoadFromTValue requires a TValue containing a TJDOJsonArray');
|
||||
|
||||
lSer := TMVCJsonDataObjectsSerializer.Create;
|
||||
@ -118,7 +124,7 @@ begin
|
||||
|
||||
end;
|
||||
|
||||
function TDataSetHelper.AsJSONArray( AIgnoredFields: TArray<string>): string;
|
||||
function TDataSetHelper.AsJSONArray: string;
|
||||
var
|
||||
lSerializer: IMVCSerializer;
|
||||
begin
|
||||
@ -126,7 +132,7 @@ begin
|
||||
if not Eof then
|
||||
begin
|
||||
lSerializer := TMVCJsonDataObjectsSerializer.Create;
|
||||
Result := lSerializer.SerializeDataSet(Self, TMVCIgnoredList(AIgnoredFields), ncLowerCase);
|
||||
Result := lSerializer.SerializeDataSet(Self, [], ncLowerCase);
|
||||
// TDataSetUtils.DataSetToJSONArray(Self, JArr, false);
|
||||
end;
|
||||
end;
|
||||
@ -136,12 +142,12 @@ begin
|
||||
Result := AsJSONArray;
|
||||
end;
|
||||
|
||||
function TDataSetHelper.AsJSONObject(AFieldNamePolicy: TFieldNamePolicy; AIgnoredFields: TArray<string>): string;
|
||||
function TDataSetHelper.AsJSONObject(AFieldNamePolicy: TFieldNamePolicy): string;
|
||||
var
|
||||
lSerializer: IMVCSerializer;
|
||||
begin
|
||||
lSerializer := TMVCJsonDataObjectsSerializer.Create;
|
||||
Result := lSerializer.SerializeDataSetRecord(Self, TMVCIgnoredList(AIgnoredFields), ncAsIs);
|
||||
Result := lSerializer.SerializeDataSetRecord(Self, [], ncAsIs);
|
||||
// Mapper.DataSetToJSONObject(Self, JObj, false);
|
||||
end;
|
||||
|
||||
@ -169,7 +175,8 @@ begin
|
||||
Result := nil;
|
||||
end;
|
||||
|
||||
function TDataSetHelper.AsObjectList<T>(CloseAfterScroll: boolean; OwnsObjects: boolean): TObjectList<T>;
|
||||
function TDataSetHelper.AsObjectList<T>(CloseAfterScroll: boolean; OwnsObjects: boolean)
|
||||
: TObjectList<T>;
|
||||
var
|
||||
lObjs: TObjectList<T>;
|
||||
begin
|
||||
@ -196,13 +203,15 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TDataSetHelper.LoadFromJSONArrayString(AJSONArrayString: string; AIgnoredFields: TArray<string>;
|
||||
procedure TDataSetHelper.LoadFromJSONArrayString(AJSONArrayString: string;
|
||||
AIgnoredFields: TArray<string>;
|
||||
AFieldNamePolicy: TFieldNamePolicy);
|
||||
begin
|
||||
AppendFromJSONArrayString(AJSONArrayString, AIgnoredFields, AFieldNamePolicy);
|
||||
end;
|
||||
|
||||
procedure TDataSetHelper.LoadFromJSONArray(AJSONArray: TJSONArray; AFieldNamePolicy: TFieldNamePolicy);
|
||||
procedure TDataSetHelper.LoadFromJSONArray(AJSONArray: TJSONArray;
|
||||
AFieldNamePolicy: TFieldNamePolicy);
|
||||
var
|
||||
lSerializer: TMVCJsonDataObjectsSerializer;
|
||||
lBookmark: TArray<Byte>;
|
||||
@ -223,13 +232,14 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TDataSetHelper.LoadFromJSONArrayString(AJSONArrayString: string; AFieldNamePolicy: TFieldNamePolicy);
|
||||
procedure TDataSetHelper.LoadFromJSONArrayString(AJSONArrayString: string;
|
||||
AFieldNamePolicy: TFieldNamePolicy);
|
||||
begin
|
||||
AppendFromJSONArrayString(AJSONArrayString, TArray<string>.Create(), AFieldNamePolicy);
|
||||
end;
|
||||
|
||||
procedure TDataSetHelper.LoadFromJSONArrayStringItems(AJSONArrayString: string;
|
||||
AFieldNamePolicy: TFieldNamePolicy = TFieldNamePolicy.fpLowerCase);
|
||||
AFieldNamePolicy: TFieldNamePolicy);
|
||||
var aJson:TJsonObject;
|
||||
begin
|
||||
aJson := TJsonObject.Create;
|
||||
@ -242,7 +252,8 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TDataSetHelper.AppendFromJSONArrayString(AJSONArrayString: string; AIgnoredFields: TArray<string>;
|
||||
procedure TDataSetHelper.AppendFromJSONArrayString(AJSONArrayString: string;
|
||||
AIgnoredFields: TArray<string>;
|
||||
AFieldNamePolicy: TFieldNamePolicy);
|
||||
begin
|
||||
LoadFromJSONArray(AJSONArrayString, AFieldNamePolicy);
|
||||
@ -261,7 +272,8 @@ begin
|
||||
// AFieldNamePolicy);
|
||||
end;
|
||||
|
||||
procedure TDataSetHelper.LoadFromJSONObjectString(AJSONObjectString: string; AIgnoredFields: TArray<string>);
|
||||
procedure TDataSetHelper.LoadFromJSONObjectString(AJSONObjectString: string;
|
||||
AIgnoredFields: TArray<string>);
|
||||
var
|
||||
lSerializer: IMVCSerializer;
|
||||
begin
|
||||
@ -269,7 +281,8 @@ begin
|
||||
lSerializer.DeserializeDataSetRecord(AJSONObjectString, Self, nil, ncAsIs);
|
||||
end;
|
||||
|
||||
procedure TDataSetHelper.LoadFromJSONObject(AJSONObject: TJSONObject; AFieldNamePolicy: TFieldNamePolicy);
|
||||
procedure TDataSetHelper.LoadFromJSONObject(AJSONObject: TJSONObject;
|
||||
AFieldNamePolicy: TFieldNamePolicy);
|
||||
begin
|
||||
LoadFromJSONObject(AJSONObject, TArray<string>.Create());
|
||||
end;
|
||||
@ -313,13 +326,13 @@ begin
|
||||
begin
|
||||
if _attribute is MVCColumnAttribute then
|
||||
begin
|
||||
FoundAttribute := True;
|
||||
FoundAttribute := true;
|
||||
mf := MVCColumnAttribute(_attribute);
|
||||
_dict.Add(_field.Name, mf.FieldName);
|
||||
_keys.Add(_field.Name, mf.IsPK);
|
||||
end
|
||||
else if _attribute is MVCDoNotSerializeAttribute then
|
||||
FoundTransientAttribute := True;
|
||||
FoundTransientAttribute := true;
|
||||
end;
|
||||
if ((not FoundAttribute) and (not FoundTransientAttribute)) then
|
||||
begin
|
||||
|
@ -27,7 +27,6 @@
|
||||
unit MVCFramework.DuckTyping;
|
||||
|
||||
{$I dmvcframework.inc}
|
||||
|
||||
{$LEGACYIFEND ON}
|
||||
|
||||
interface
|
||||
@ -103,7 +102,8 @@ type
|
||||
function WrappedObject: TObject;
|
||||
procedure Sort(const APropertyName: string; const AOrder: TSortingType = soAscending);
|
||||
|
||||
procedure QuickSort(const AList: IMVCList; ALeft, ARigth: Integer; ACompare: TFunc<TObject, TObject, Integer>); overload;
|
||||
procedure QuickSort(const AList: IMVCList; ALeft, ARigth: Integer;
|
||||
ACompare: TFunc<TObject, TObject, Integer>); overload;
|
||||
procedure QuickSort(const AList: IMVCList; ACompare: TFunc<TObject, TObject, Integer>); overload;
|
||||
public
|
||||
constructor Create(const AObjectAsDuck: TObject; const AOwnsObject: Boolean = False); overload;
|
||||
@ -195,8 +195,7 @@ begin
|
||||
Result := CanBeWrappedAsList(AObjectAsDuck, lList);
|
||||
end;
|
||||
|
||||
class function TDuckTypedList.CanBeWrappedAsList(const AObjectAsDuck: TObject;
|
||||
out AMVCList: IMVCList): Boolean;
|
||||
class function TDuckTypedList.CanBeWrappedAsList(const AObjectAsDuck: TObject; out AMVCList: IMVCList): Boolean;
|
||||
var
|
||||
List: IMVCList;
|
||||
begin
|
||||
@ -254,13 +253,11 @@ begin
|
||||
FAddMethod := FObjType.GetMethod('Add');
|
||||
FClearMethod := FObjType.GetMethod('Clear');
|
||||
|
||||
{$IF CompilerVersion >= 23}
|
||||
|
||||
{$IF CompilerVersion >= 23}
|
||||
if Assigned(FObjType.GetIndexedProperty('Items')) then
|
||||
FGetItemMethod := FObjType.GetIndexedProperty('Items').ReadMethod;
|
||||
|
||||
{$IFEND}
|
||||
|
||||
{$IFEND}
|
||||
if not Assigned(FGetItemMethod) then
|
||||
FGetItemMethod := FObjType.GetMethod('GetItem');
|
||||
|
||||
@ -288,10 +285,18 @@ begin
|
||||
end;
|
||||
|
||||
function TDuckTypedList.GetItem(const AIndex: Integer): TObject;
|
||||
var
|
||||
lValue: TValue;
|
||||
begin
|
||||
if not Assigned(FGetItemMethod) then
|
||||
raise EMVCDuckTypingException.Create('Cannot find method Indexed property "Items" or method "GetItem" or method "GetElement" in the Duck Object.');
|
||||
Result := FGetItemMethod.Invoke(FObjectAsDuck, [AIndex]).AsObject;
|
||||
raise EMVCDuckTypingException.Create
|
||||
('Cannot find method Indexed property "Items" or method "GetItem" or method "GetElement" in the Duck Object.');
|
||||
lValue := FGetItemMethod.Invoke(FObjectAsDuck, [AIndex]);
|
||||
if not lValue.IsObject then
|
||||
begin
|
||||
raise EMVCDuckTypingException.Create('Items in list can be only objects');
|
||||
end;
|
||||
Result := lValue.AsObject;
|
||||
end;
|
||||
|
||||
function TDuckTypedList.GetOwnsObjects: Boolean;
|
||||
@ -313,17 +318,16 @@ begin
|
||||
|
||||
Result := (ObjectType.GetMethod('Add') <> nil) and (ObjectType.GetMethod('Clear') <> nil)
|
||||
|
||||
{$IF CompilerVersion >= 23}
|
||||
|
||||
{$IF CompilerVersion >= 23}
|
||||
and (ObjectType.GetIndexedProperty('Items') <> nil) and (ObjectType.GetIndexedProperty('Items').ReadMethod <> nil)
|
||||
|
||||
{$IFEND}
|
||||
|
||||
and (ObjectType.GetMethod('GetItem') <> nil) or (ObjectType.GetMethod('GetElement') <> nil) and (ObjectType.GetProperty('Count') <> nil);
|
||||
{$IFEND}
|
||||
and (ObjectType.GetMethod('GetItem') <> nil) or (ObjectType.GetMethod('GetElement') <> nil) and
|
||||
(ObjectType.GetProperty('Count') <> nil);
|
||||
end;
|
||||
|
||||
procedure TDuckTypedList.QuickSort(const AList: IMVCList; ALeft,
|
||||
ARigth: Integer; ACompare: TFunc<TObject, TObject, Integer>);
|
||||
procedure TDuckTypedList.QuickSort(const AList: IMVCList; ALeft, ARigth: Integer;
|
||||
ACompare: TFunc<TObject, TObject, Integer>);
|
||||
var
|
||||
I, J: Integer;
|
||||
P: TObject;
|
||||
@ -364,8 +368,7 @@ begin
|
||||
until I >= ARigth;
|
||||
end;
|
||||
|
||||
procedure TDuckTypedList.QuickSort(const AList: IMVCList;
|
||||
ACompare: TFunc<TObject, TObject, Integer>);
|
||||
procedure TDuckTypedList.QuickSort(const AList: IMVCList; ACompare: TFunc<TObject, TObject, Integer>);
|
||||
begin
|
||||
QuickSort(AList, 0, AList.Count - 1, ACompare);
|
||||
end;
|
||||
|
@ -32,10 +32,10 @@ uses
|
||||
System.SysUtils,
|
||||
System.Classes,
|
||||
System.Generics.Collections,
|
||||
System.JSON,
|
||||
MVCFramework,
|
||||
MVCFramework.Commons,
|
||||
MVCFramework.JWT;
|
||||
MVCFramework.JWT,
|
||||
JsonDataObjects;
|
||||
|
||||
type
|
||||
|
||||
@ -52,7 +52,7 @@ type
|
||||
protected
|
||||
function NeedsToBeExtended(const JWTValue: TJWT): Boolean;
|
||||
procedure ExtendExpirationTime(const JWTValue: TJWT);
|
||||
procedure InternalRender(AJSONValue: TJSONValue; AContentType: string; AContentEncoding: string;
|
||||
procedure InternalRender(AJSONOb: TJDOJsonObject; AContentType: string; AContentEncoding: string;
|
||||
AContext: TWebContext; AInstanceOwner: Boolean = True);
|
||||
|
||||
procedure RenderError(const AErrorCode: UInt16; const AErrorMessage: string; const AContext: TWebContext;
|
||||
@ -100,13 +100,13 @@ begin
|
||||
(JWTValue.LeewaySeconds + JWTValue.LiveValidityWindowInSeconds) * OneSecond;
|
||||
end;
|
||||
|
||||
procedure TMVCJWTAuthenticationMiddleware.InternalRender(AJSONValue: TJSONValue; AContentType, AContentEncoding: string;
|
||||
AContext: TWebContext; AInstanceOwner: Boolean);
|
||||
procedure TMVCJWTAuthenticationMiddleware.InternalRender(AJSONOb: TJDOJsonObject;
|
||||
AContentType, AContentEncoding: string; AContext: TWebContext; AInstanceOwner: Boolean);
|
||||
var
|
||||
Encoding: TEncoding;
|
||||
ContentType, JValue: string;
|
||||
begin
|
||||
JValue := AJSONValue.ToJSON;
|
||||
JValue := AJSONOb.ToJSON;
|
||||
|
||||
AContext.Response.RawWebResponse.ContentType := AContentType + '; charset=' + AContentEncoding;
|
||||
ContentType := AContentType + '; charset=' + AContentEncoding;
|
||||
@ -120,7 +120,7 @@ begin
|
||||
end;
|
||||
|
||||
if AInstanceOwner then
|
||||
FreeAndNil(AJSONValue)
|
||||
FreeAndNil(AJSONOb)
|
||||
end;
|
||||
|
||||
function TMVCJWTAuthenticationMiddleware.NeedsToBeExtended(const JWTValue: TJWT): Boolean;
|
||||
@ -129,12 +129,12 @@ var
|
||||
begin
|
||||
lWillExpireIn := SecondsBetween(Now, JWTValue.Claims.ExpirationTime);
|
||||
Result := lWillExpireIn <= JWTValue.LiveValidityWindowInSeconds;
|
||||
// Log.Debug('--------------------------', 'EXPIRE');
|
||||
// Log.DebugFmt('Now : %s', [TimeToStr(Now)], 'EXPIRE');
|
||||
// Log.DebugFmt('ExpirationTime : %s', [TimeToStr(JWTValue.Claims.ExpirationTime)], 'EXPIRE');
|
||||
// Log.DebugFmt('WillExpireIn : %d', [lWillExpireIn], 'EXPIRE');
|
||||
// Log.DebugFmt('LVW : %d', [JWTValue.LiveValidityWindowInSeconds], 'EXPIRE');
|
||||
// Log.DebugFmt('NeedsToBeExtened: %s', [BoolToStr(Result, True)], 'EXPIRE');
|
||||
// Log.Debug('--------------------------', 'EXPIRE');
|
||||
// Log.DebugFmt('Now : %s', [TimeToStr(Now)], 'EXPIRE');
|
||||
// Log.DebugFmt('ExpirationTime : %s', [TimeToStr(JWTValue.Claims.ExpirationTime)], 'EXPIRE');
|
||||
// Log.DebugFmt('WillExpireIn : %d', [lWillExpireIn], 'EXPIRE');
|
||||
// Log.DebugFmt('LVW : %d', [JWTValue.LiveValidityWindowInSeconds], 'EXPIRE');
|
||||
// Log.DebugFmt('NeedsToBeExtened: %s', [BoolToStr(Result, True)], 'EXPIRE');
|
||||
end;
|
||||
|
||||
procedure TMVCJWTAuthenticationMiddleware.OnAfterControllerAction(AContext: TWebContext; const AActionName: string;
|
||||
@ -212,8 +212,8 @@ begin
|
||||
AContext.LoggedUser.LoggedSince := JWTValue.Claims.IssuedAt;
|
||||
AContext.LoggedUser.CustomData := JWTValue.CustomClaims.AsCustomData;
|
||||
|
||||
FAuthenticationHandler.OnAuthorization(AContext, AContext.LoggedUser.Roles, AControllerQualifiedClassName, AActionName,
|
||||
IsAuthorized);
|
||||
FAuthenticationHandler.OnAuthorization(AContext, AContext.LoggedUser.Roles, AControllerQualifiedClassName,
|
||||
AActionName, IsAuthorized);
|
||||
|
||||
if IsAuthorized then
|
||||
begin
|
||||
@ -222,7 +222,6 @@ begin
|
||||
if NeedsToBeExtended(JWTValue) then
|
||||
begin
|
||||
ExtendExpirationTime(JWTValue);
|
||||
// .Claims.ExpirationTime := Now + JWTValue.LiveValidityWindowInSeconds * OneSecond;
|
||||
AContext.Response.SetCustomHeader('Authentication', 'bearer ' + JWTValue.GetToken);
|
||||
end;
|
||||
end;
|
||||
@ -248,6 +247,7 @@ var
|
||||
IsValid: Boolean;
|
||||
JWTValue: TJWT;
|
||||
lCustomPair: TPair<string, string>;
|
||||
LObj: TJDOJsonObject;
|
||||
begin
|
||||
if SameText(AContext.Request.PathInfo, FLoginURLSegment) and (AContext.Request.HTTPMethod = httpPOST) then
|
||||
begin
|
||||
@ -265,64 +265,81 @@ begin
|
||||
try
|
||||
SessionData := TSessionData.Create;
|
||||
try
|
||||
FAuthenticationHandler.OnAuthentication(AContext, UserName, Password, RolesList, IsValid, SessionData);
|
||||
if IsValid then
|
||||
begin
|
||||
JWTValue := TJWT.Create(FSecret, FLeewaySeconds);
|
||||
try
|
||||
// let's user config claims and custom claims
|
||||
if not Assigned(FSetupJWTClaims) then
|
||||
raise EMVCJWTException.Create('SetupJWTClaims not set');
|
||||
FSetupJWTClaims(JWTValue);
|
||||
try
|
||||
FAuthenticationHandler.OnAuthentication(AContext, UserName, Password, RolesList, IsValid, SessionData);
|
||||
if IsValid then
|
||||
begin
|
||||
JWTValue := TJWT.Create(FSecret, FLeewaySeconds);
|
||||
try
|
||||
// let's user config claims and custom claims
|
||||
if not Assigned(FSetupJWTClaims) then
|
||||
raise EMVCJWTException.Create('SetupJWTClaims not set');
|
||||
|
||||
// these claims are mandatory and managed by the middleware
|
||||
if not JWTValue.CustomClaims['username'].IsEmpty then
|
||||
raise EMVCJWTException.Create
|
||||
('Custom claim "username" is reserved and cannot be modified in the JWT setup');
|
||||
FSetupJWTClaims(JWTValue);
|
||||
|
||||
if not JWTValue.CustomClaims['roles'].IsEmpty then
|
||||
raise EMVCJWTException.Create('Custom claim "roles" is reserved and cannot be modified in the JWT setup');
|
||||
// these claims are mandatory and managed by the middleware
|
||||
if not JWTValue.CustomClaims['username'].IsEmpty then
|
||||
raise EMVCJWTException.Create
|
||||
('Custom claim "username" is reserved and cannot be modified in the JWT setup');
|
||||
|
||||
JWTValue.CustomClaims['username'] := UserName;
|
||||
JWTValue.CustomClaims['roles'] := string.Join(',', RolesList.ToArray);
|
||||
if not JWTValue.CustomClaims['roles'].IsEmpty then
|
||||
raise EMVCJWTException.Create
|
||||
('Custom claim "roles" is reserved and cannot be modified in the JWT setup');
|
||||
|
||||
if JWTValue.LiveValidityWindowInSeconds > 0 then
|
||||
begin
|
||||
if NeedsToBeExtended(JWTValue) then
|
||||
JWTValue.CustomClaims['username'] := UserName;
|
||||
JWTValue.CustomClaims['roles'] := string.Join(',', RolesList.ToArray);
|
||||
|
||||
if JWTValue.LiveValidityWindowInSeconds > 0 then
|
||||
begin
|
||||
ExtendExpirationTime(JWTValue);
|
||||
if NeedsToBeExtended(JWTValue) then
|
||||
begin
|
||||
ExtendExpirationTime(JWTValue);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
// setup the current logged user from the JWT
|
||||
AContext.LoggedUser.Roles.AddRange(RolesList);
|
||||
AContext.LoggedUser.UserName := JWTValue.CustomClaims['username'];
|
||||
AContext.LoggedUser.LoggedSince := JWTValue.Claims.IssuedAt;
|
||||
AContext.LoggedUser.Realm := JWTValue.Claims.Subject;
|
||||
// setup the current logged user from the JWT
|
||||
AContext.LoggedUser.Roles.AddRange(RolesList);
|
||||
AContext.LoggedUser.UserName := JWTValue.CustomClaims['username'];
|
||||
AContext.LoggedUser.LoggedSince := JWTValue.Claims.IssuedAt;
|
||||
AContext.LoggedUser.Realm := JWTValue.Claims.Subject;
|
||||
|
||||
if SessionData.Count > 0 then
|
||||
begin
|
||||
AContext.LoggedUser.CustomData := TMVCCustomData.Create;
|
||||
for lCustomPair in SessionData do
|
||||
if SessionData.Count > 0 then
|
||||
begin
|
||||
AContext.LoggedUser.CustomData.AddOrSetValue(lCustomPair.Key, lCustomPair.Value);
|
||||
if not JWTValue.CustomClaims.Items[lCustomPair.Key].IsEmpty then
|
||||
raise EMVCJWTException.CreateFmt('JWT Error: "%s" is a reserved key name', [lCustomPair.Key]);
|
||||
JWTValue.CustomClaims.Items[lCustomPair.Key] := lCustomPair.Value;
|
||||
AContext.LoggedUser.CustomData := TMVCCustomData.Create;
|
||||
for lCustomPair in SessionData do
|
||||
begin
|
||||
AContext.LoggedUser.CustomData.AddOrSetValue(lCustomPair.Key, lCustomPair.Value);
|
||||
if not JWTValue.CustomClaims.Items[lCustomPair.Key].IsEmpty then
|
||||
raise EMVCJWTException.CreateFmt('JWT Error: "%s" is a reserved key name', [lCustomPair.Key]);
|
||||
JWTValue.CustomClaims.Items[lCustomPair.Key] := lCustomPair.Value;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
InternalRender(TJSONObject.Create(TJSONPair.Create('token', JWTValue.GetToken)),
|
||||
TMVCMediaType.APPLICATION_JSON, TMVCConstants.DEFAULT_CONTENT_CHARSET, AContext);
|
||||
LObj := TJDOJsonObject.Create;
|
||||
try
|
||||
LObj.S['token'] := JWTValue.GetToken;
|
||||
InternalRender(LObj, TMVCMediaType.APPLICATION_JSON, TMVCConstants.DEFAULT_CONTENT_CHARSET,
|
||||
AContext, False);
|
||||
finally
|
||||
LObj.Free;
|
||||
end;
|
||||
AHandled := True;
|
||||
finally
|
||||
JWTValue.Free;
|
||||
end;
|
||||
end
|
||||
else
|
||||
begin
|
||||
RenderError(HTTP_STATUS.Forbidden, 'Forbidden', AContext);
|
||||
AHandled := True;
|
||||
finally
|
||||
JWTValue.Free;
|
||||
end;
|
||||
end
|
||||
else
|
||||
begin
|
||||
RenderError(HTTP_STATUS.Forbidden, 'Forbidden', AContext);
|
||||
AHandled := True;
|
||||
except
|
||||
on E: Exception do
|
||||
begin
|
||||
RenderError(HTTP_STATUS.Forbidden, E.Message, AContext);
|
||||
AHandled := True;
|
||||
Exit;
|
||||
end;
|
||||
end;
|
||||
finally
|
||||
SessionData.Free;
|
||||
@ -336,27 +353,27 @@ end;
|
||||
procedure TMVCJWTAuthenticationMiddleware.RenderError(const AErrorCode: UInt16; const AErrorMessage: string;
|
||||
const AContext: TWebContext; const AErrorClassName: string);
|
||||
var
|
||||
Jo: TJSONObject;
|
||||
Status: string;
|
||||
LJo: TJDOJsonObject;
|
||||
LStatus: string;
|
||||
begin
|
||||
AContext.Response.StatusCode := AErrorCode;
|
||||
AContext.Response.ReasonString := AErrorMessage;
|
||||
|
||||
Status := 'error';
|
||||
LStatus := 'error';
|
||||
if (AErrorCode div 100) = 2 then
|
||||
Status := 'ok';
|
||||
LStatus := 'ok';
|
||||
|
||||
Jo := TJSONObject.Create;
|
||||
Jo.AddPair('status', Status);
|
||||
LJo := TJDOJsonObject.Create;
|
||||
LJo.S['status'] := LStatus;
|
||||
|
||||
if AErrorClassName = '' then
|
||||
Jo.AddPair('classname', TJSONNull.Create)
|
||||
LJo.Values['classname'] := nil
|
||||
else
|
||||
Jo.AddPair('classname', AErrorClassName);
|
||||
LJo.S['classname'] := AErrorClassName;
|
||||
|
||||
Jo.AddPair('message', AErrorMessage);
|
||||
LJo.S['message'] := AErrorMessage;
|
||||
|
||||
InternalRender(Jo, TMVCConstants.DEFAULT_CONTENT_TYPE, TMVCConstants.DEFAULT_CONTENT_CHARSET, AContext);
|
||||
InternalRender(LJo, TMVCConstants.DEFAULT_CONTENT_TYPE, TMVCConstants.DEFAULT_CONTENT_CHARSET, AContext);
|
||||
end;
|
||||
|
||||
end.
|
||||
|
@ -1361,16 +1361,7 @@ begin
|
||||
on E: EIdHTTPProtocolException do
|
||||
begin
|
||||
Result.HasError := True;
|
||||
Result.Body.Write(UTF8Encode(E.ErrorMessage)[1],
|
||||
|
||||
{$IF CompilerVersion > 30}
|
||||
ElementToCharLen(string(UTF8Encode(E.ErrorMessage)),
|
||||
|
||||
{$ELSE}
|
||||
ElementToCharLen(UTF8Encode(E.ErrorMessage),
|
||||
|
||||
{$ENDIF}
|
||||
Length(E.ErrorMessage) * 2));
|
||||
Result.Body.WriteUTF8(E.ErrorMessage);
|
||||
end
|
||||
else
|
||||
raise;
|
||||
@ -1477,16 +1468,7 @@ begin
|
||||
on E: EIdHTTPProtocolException do
|
||||
begin
|
||||
Result.HasError := True;
|
||||
Result.Body.Write(UTF8Encode(E.ErrorMessage)[1],
|
||||
|
||||
{$IF CompilerVersion > 30}
|
||||
ElementToCharLen(string(UTF8Encode(E.ErrorMessage)),
|
||||
|
||||
{$ELSE}
|
||||
ElementToCharLen(UTF8Encode(E.ErrorMessage),
|
||||
|
||||
{$ENDIF}
|
||||
Length(E.ErrorMessage) * 2));
|
||||
Result.Body.WriteUTF8(E.ErrorMessage);
|
||||
end
|
||||
else
|
||||
raise;
|
||||
|
@ -59,7 +59,9 @@ type
|
||||
|
||||
TMVCIgnoredList = array of string;
|
||||
|
||||
TMVCSerializationAction = TProc<TObject, TMVCStringDictionary>;
|
||||
TMVCSerializationAction<T: class> = reference to procedure(const AObject: T; const ADictionary: TMVCStringDictionary);
|
||||
TMVCSerializationAction = reference to procedure(const AObject: TObject; const ADictionary: TMVCStringDictionary);
|
||||
TMVCDatasetSerializationAction = reference to procedure(const ADataSet: TDataset; const ADictionary: TMVCStringDictionary);
|
||||
|
||||
EMVCSerializationException = class(EMVCException)
|
||||
end;
|
||||
@ -173,11 +175,13 @@ type
|
||||
class function GetKeyName(const AProperty: TRttiProperty; const AType: TRttiType): string; overload; static;
|
||||
|
||||
class function HasAttribute<T: class>(const AMember: TRttiNamedObject): boolean; overload; static;
|
||||
class function HasAttribute<T: class>(const AMember: TRttiNamedObject; out AAttribute: T): boolean; overload; static;
|
||||
|
||||
class function AttributeExists<T: TCustomAttribute>(const AAttributes: TArray<TCustomAttribute>; out AAttribute: T): boolean;
|
||||
class function HasAttribute<T: class>(const AMember: TRttiNamedObject; out AAttribute: T): boolean;
|
||||
overload; static;
|
||||
|
||||
class function AttributeExists<T: TCustomAttribute>(const AAttributes: TArray<TCustomAttribute>; out AAttribute: T)
|
||||
: boolean; overload; static;
|
||||
class function AttributeExists<T: TCustomAttribute>(const AAttributes: TArray<TCustomAttribute>): boolean;
|
||||
overload; static;
|
||||
class function AttributeExists<T: TCustomAttribute>(const AAttributes: TArray<TCustomAttribute>): boolean; overload; static;
|
||||
|
||||
class procedure EncodeStream(AInput, AOutput: TStream); static;
|
||||
class procedure DecodeStream(AInput, AOutput: TStream); static;
|
||||
@ -185,7 +189,8 @@ type
|
||||
class function EncodeString(const AInput: string): string; static;
|
||||
class function DecodeString(const AInput: string): string; static;
|
||||
|
||||
class procedure DeSerializeStringStream(AStream: TStream; const ASerializedString: string; const AEncoding: string); static;
|
||||
class procedure DeSerializeStringStream(AStream: TStream; const ASerializedString: string;
|
||||
const AEncoding: string); static;
|
||||
class procedure DeSerializeBase64StringStream(AStream: TStream; const ABase64SerializedString: string); static;
|
||||
|
||||
class function GetTypeKindAsString(const ATypeKind: TTypeKind): string; static;
|
||||
@ -197,6 +202,8 @@ type
|
||||
class function IsAPropertyToSkip(const aPropName: string): boolean; static;
|
||||
end;
|
||||
|
||||
TMVCLinksCallback = reference to procedure(const Links: TMVCStringDictionary);
|
||||
|
||||
function DateTimeToISOTimeStamp(const ADateTime: TDateTime): string;
|
||||
function DateToISODate(const ADate: TDateTime): string;
|
||||
function TimeToISOTime(const ATime: TTime): string;
|
||||
@ -242,7 +249,8 @@ var
|
||||
begin
|
||||
lDateTime := ADateTime;
|
||||
if lDateTime.Length < 19 then
|
||||
raise Exception.CreateFmt('Invalid parameter "%s". Hint: DateTime parameters must be formatted in ISO8601 (e.g. 2010-10-12T10:12:23)',
|
||||
raise Exception.CreateFmt
|
||||
('Invalid parameter "%s". Hint: DateTime parameters must be formatted in ISO8601 (e.g. 2010-10-12T10:12:23)',
|
||||
[ADateTime]);
|
||||
|
||||
if lDateTime.Chars[10] = ' ' then
|
||||
@ -250,8 +258,6 @@ begin
|
||||
lDateTime := lDateTime.Substring(0, 10) + 'T' + lDateTime.Substring(11);
|
||||
end;
|
||||
Result := ISO8601ToDate(lDateTime, true);
|
||||
// Result := EncodeDateTime(StrToInt(Copy(ADateTime, 1, 4)), StrToInt(Copy(ADateTime, 6, 2)), StrToInt(Copy(ADateTime, 9, 2)),
|
||||
// StrToInt(Copy(ADateTime, 12, 2)), StrToInt(Copy(ADateTime, 15, 2)), StrToInt(Copy(ADateTime, 18, 2)), 0);
|
||||
end;
|
||||
|
||||
function ISODateToDate(const ADate: string): TDate;
|
||||
@ -266,8 +272,8 @@ end;
|
||||
|
||||
{ TMVCSerializerHelper }
|
||||
|
||||
class procedure TMVCSerializerHelper.DeSerializeBase64StringStream(
|
||||
AStream: TStream; const ABase64SerializedString: string);
|
||||
class procedure TMVCSerializerHelper.DeSerializeBase64StringStream(AStream: TStream;
|
||||
const ABase64SerializedString: string);
|
||||
var
|
||||
SS: TStringStream;
|
||||
begin
|
||||
@ -281,7 +287,8 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
class procedure TMVCSerializerHelper.DeSerializeStringStream(AStream: TStream; const ASerializedString: string; const AEncoding: string);
|
||||
class procedure TMVCSerializerHelper.DeSerializeStringStream(AStream: TStream; const ASerializedString: string;
|
||||
const AEncoding: string);
|
||||
var
|
||||
Encoding: TEncoding;
|
||||
SS: TStringStream;
|
||||
@ -326,7 +333,8 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
class function TMVCSerializerHelper.AttributeExists<T>(const AAttributes: TArray<TCustomAttribute>; out AAttribute: T): boolean;
|
||||
class function TMVCSerializerHelper.AttributeExists<T>(const AAttributes: TArray<TCustomAttribute>;
|
||||
out AAttribute: T): boolean;
|
||||
var
|
||||
Att: TCustomAttribute;
|
||||
begin
|
||||
@ -340,8 +348,7 @@ begin
|
||||
Result := (AAttribute <> nil);
|
||||
end;
|
||||
|
||||
class function TMVCSerializerHelper.AttributeExists<T>(
|
||||
const AAttributes: TArray<TCustomAttribute>): boolean;
|
||||
class function TMVCSerializerHelper.AttributeExists<T>(const AAttributes: TArray<TCustomAttribute>): boolean;
|
||||
var
|
||||
Att: TCustomAttribute;
|
||||
begin
|
||||
@ -384,7 +391,8 @@ begin
|
||||
if Assigned(ObjectType) then
|
||||
Result := CreateObject(ObjectType)
|
||||
else
|
||||
raise Exception.CreateFmt('Cannot find Rtti for %s. Hint: Is the specified classtype linked in the module?', [AQualifiedClassName]);
|
||||
raise Exception.CreateFmt('Cannot find RTTI for %s. Hint: Is the specified classtype linked in the module?',
|
||||
[AQualifiedClassName]);
|
||||
finally
|
||||
Context.Free;
|
||||
end;
|
||||
@ -400,7 +408,6 @@ begin
|
||||
Soap.EncdDecd.DecodeStream(AInput, AOutput);
|
||||
|
||||
{$ENDIF}
|
||||
|
||||
end;
|
||||
|
||||
class function TMVCSerializerHelper.DecodeString(const AInput: string): string;
|
||||
@ -413,7 +420,6 @@ begin
|
||||
Result := Soap.EncdDecd.DecodeString(AInput);
|
||||
|
||||
{$ENDIF}
|
||||
|
||||
end;
|
||||
|
||||
class procedure TMVCSerializerHelper.EncodeStream(AInput, AOutput: TStream);
|
||||
@ -426,7 +432,6 @@ begin
|
||||
Soap.EncdDecd.EncodeStream(AInput, AOutput);
|
||||
|
||||
{$ENDIF}
|
||||
|
||||
end;
|
||||
|
||||
class function TMVCSerializerHelper.EncodeString(const AInput: string): string;
|
||||
@ -439,7 +444,6 @@ begin
|
||||
Result := Soap.EncdDecd.EncodeString(AInput);
|
||||
|
||||
{$ENDIF}
|
||||
|
||||
end;
|
||||
|
||||
class function TMVCSerializerHelper.GetKeyName(const AProperty: TRttiProperty; const AType: TRttiType): string;
|
||||
@ -507,8 +511,7 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
class function TMVCSerializerHelper.IsAPropertyToSkip(
|
||||
const aPropName: string): boolean;
|
||||
class function TMVCSerializerHelper.IsAPropertyToSkip(const aPropName: string): boolean;
|
||||
begin
|
||||
Result := (aPropName = 'RefCount') or (aPropName = 'Disposed');
|
||||
end;
|
||||
|
@ -49,7 +49,8 @@ type
|
||||
procedure SerializeRoot(
|
||||
const AObject: TObject;
|
||||
out ASerializerObject: TObject;
|
||||
const AAttributes: TArray<TCustomAttribute>
|
||||
const AAttributes: TArray<TCustomAttribute>;
|
||||
const ASerializationAction: TMVCSerializationAction = nil
|
||||
);
|
||||
|
||||
procedure DeserializeAttribute(
|
||||
@ -80,19 +81,22 @@ type
|
||||
function SerializeCollection(
|
||||
const AList: TObject;
|
||||
const AType: TMVCSerializationType = stDefault;
|
||||
const AIgnoredAttributes: TMVCIgnoredList = []
|
||||
const AIgnoredAttributes: TMVCIgnoredList = [];
|
||||
const ASerializationAction: TMVCSerializationAction = nil
|
||||
): string;
|
||||
|
||||
function SerializeDataSet(
|
||||
const ADataSet: TDataSet;
|
||||
const AIgnoredFields: TMVCIgnoredList = [];
|
||||
const ANameCase: TMVCNameCase = ncAsIs
|
||||
const ANameCase: TMVCNameCase = ncAsIs;
|
||||
const ASerializationAction: TMVCDatasetSerializationAction = nil
|
||||
): string;
|
||||
|
||||
function SerializeDataSetRecord(
|
||||
const ADataSet: TDataSet;
|
||||
const AIgnoredFields: TMVCIgnoredList = [];
|
||||
const ANameCase: TMVCNameCase = ncAsIs
|
||||
const ANameCase: TMVCNameCase = ncAsIs;
|
||||
const ASerializationAction: TMVCDatasetSerializationAction = nil
|
||||
): string;
|
||||
|
||||
procedure DeserializeObject(
|
||||
|
@ -35,7 +35,7 @@ uses
|
||||
System.Classes,
|
||||
System.SysUtils,
|
||||
MVCFramework.Serializer.Intf,
|
||||
MVCFramework.Serializer.Commons;
|
||||
MVCFramework.Serializer.Commons, JsonDataObjects, MVCFramework.Commons;
|
||||
|
||||
type
|
||||
|
||||
@ -43,27 +43,15 @@ type
|
||||
protected
|
||||
// procedure Serialize(const AElementValue: TValue; var ASerializerObject: TObject;
|
||||
// const AAttributes: TArray<TCustomAttribute>);
|
||||
procedure SerializeAttribute(
|
||||
const AElementValue: TValue;
|
||||
const APropertyName: string;
|
||||
const ASerializerObject: TObject;
|
||||
const AAttributes: TArray<TCustomAttribute>
|
||||
);
|
||||
procedure SerializeRoot(
|
||||
const AObject: TObject;
|
||||
out ASerializerObject: TObject;
|
||||
const AAttributes: TArray<TCustomAttribute>
|
||||
);
|
||||
procedure SerializeAttribute(const AElementValue: TValue; const APropertyName: string;
|
||||
const ASerializerObject: TObject; const AAttributes: TArray<TCustomAttribute>);
|
||||
procedure SerializeRoot(const AObject: TObject; out ASerializerObject: TObject;
|
||||
const AAttributes: TArray<TCustomAttribute>; const ASerializationAction: TMVCSerializationAction = nil);
|
||||
|
||||
procedure DeserializeAttribute(
|
||||
var AElementValue: TValue;
|
||||
const APropertyName: string;
|
||||
const ASerializerObject: TObject;
|
||||
const AAttributes: TArray<TCustomAttribute>
|
||||
);
|
||||
procedure DeserializeAttribute(var AElementValue: TValue; const APropertyName: string;
|
||||
const ASerializerObject: TObject; const AAttributes: TArray<TCustomAttribute>);
|
||||
|
||||
procedure DeserializeRoot(
|
||||
const ASerializerObject: TObject; const AObject: TObject;
|
||||
procedure DeserializeRoot(const ASerializerObject: TObject; const AObject: TObject;
|
||||
const AAttributes: TArray<TCustomAttribute>);
|
||||
|
||||
public
|
||||
@ -72,29 +60,16 @@ type
|
||||
|
||||
TMVCStringDictionarySerializer = class(TInterfacedObject, IMVCTypeSerializer)
|
||||
public
|
||||
procedure SerializeAttribute(
|
||||
const AElementValue: TValue;
|
||||
const APropertyName: string;
|
||||
const ASerializerObject: TObject;
|
||||
const AAttributes: TArray<TCustomAttribute>
|
||||
);
|
||||
procedure SerializeRoot(
|
||||
const AObject: TObject;
|
||||
out ASerializerObject: TObject;
|
||||
const AAttributes: TArray<TCustomAttribute>
|
||||
);
|
||||
procedure DeserializeAttribute(
|
||||
var AElementValue: TValue;
|
||||
const APropertyName: string;
|
||||
const ASerializerObject: TObject;
|
||||
const AAttributes: TArray<TCustomAttribute>
|
||||
);
|
||||
|
||||
procedure DeserializeRoot(
|
||||
const ASerializerObject: TObject;
|
||||
const AObject: TObject;
|
||||
const AAttributes: TArray<TCustomAttribute>
|
||||
);
|
||||
procedure SerializeAttribute(const AElementValue: TValue; const APropertyName: string;
|
||||
const ASerializerObject: TObject; const AAttributes: TArray<TCustomAttribute>);
|
||||
procedure SerializeRoot(const AObject: TObject; out ASerializerObject: TObject;
|
||||
const AAttributes: TArray<TCustomAttribute>; const ASerializationAction: TMVCSerializationAction = nil);
|
||||
procedure DeserializeAttribute(var AElementValue: TValue; const APropertyName: string;
|
||||
const ASerializerObject: TObject; const AAttributes: TArray<TCustomAttribute>);
|
||||
procedure DeserializeRoot(const ASerializerObject: TObject; const AObject: TObject;
|
||||
const AAttributes: TArray<TCustomAttribute>);
|
||||
// internal use
|
||||
class procedure Serialize(const ADict: TMVCStringDictionary; const AJSONObject: TJsonObject); inline;
|
||||
end;
|
||||
|
||||
implementation
|
||||
@ -102,16 +77,10 @@ implementation
|
||||
uses
|
||||
MVCFramework.Serializer.JsonDataObjects,
|
||||
Data.DB,
|
||||
MVCFramework.Commons,
|
||||
System.Generics.Collections,
|
||||
JsonDataObjects;
|
||||
System.Generics.Collections;
|
||||
|
||||
procedure TMVCStreamSerializerJsonDataObject.DeserializeAttribute(
|
||||
var AElementValue: TValue;
|
||||
const APropertyName: string;
|
||||
const ASerializerObject: TObject;
|
||||
const AAttributes: TArray<TCustomAttribute>
|
||||
);
|
||||
procedure TMVCStreamSerializerJsonDataObject.DeserializeAttribute(var AElementValue: TValue;
|
||||
const APropertyName: string; const ASerializerObject: TObject; const AAttributes: TArray<TCustomAttribute>);
|
||||
var
|
||||
lStream: TStream;
|
||||
SS: TStringStream;
|
||||
@ -142,8 +111,7 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TMVCStreamSerializerJsonDataObject.DeserializeRoot(
|
||||
const ASerializerObject: TObject; const AObject: TObject;
|
||||
procedure TMVCStreamSerializerJsonDataObject.DeserializeRoot(const ASerializerObject: TObject; const AObject: TObject;
|
||||
const AAttributes: TArray<TCustomAttribute>);
|
||||
var
|
||||
lValue: TValue;
|
||||
@ -152,10 +120,8 @@ begin
|
||||
DeserializeAttribute(lValue, 'data', ASerializerObject, AAttributes);
|
||||
end;
|
||||
|
||||
procedure TMVCStreamSerializerJsonDataObject.SerializeAttribute(
|
||||
const AElementValue: TValue; const APropertyName: string;
|
||||
const ASerializerObject: TObject;
|
||||
const AAttributes: TArray<TCustomAttribute>);
|
||||
procedure TMVCStreamSerializerJsonDataObject.SerializeAttribute(const AElementValue: TValue;
|
||||
const APropertyName: string; const ASerializerObject: TObject; const AAttributes: TArray<TCustomAttribute>);
|
||||
var
|
||||
Stream: TStream;
|
||||
SS: TStringStream;
|
||||
@ -185,8 +151,8 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TMVCStreamSerializerJsonDataObject.SerializeRoot(const AObject: TObject;
|
||||
out ASerializerObject: TObject; const AAttributes: TArray<TCustomAttribute>);
|
||||
procedure TMVCStreamSerializerJsonDataObject.SerializeRoot(const AObject: TObject; out ASerializerObject: TObject;
|
||||
const AAttributes: TArray<TCustomAttribute>; const ASerializationAction: TMVCSerializationAction = nil);
|
||||
var
|
||||
lSerializerObject: TJsonObject;
|
||||
begin
|
||||
@ -201,12 +167,8 @@ end;
|
||||
|
||||
{ TMVCStringDictionarySerializer }
|
||||
|
||||
procedure TMVCStringDictionarySerializer.DeserializeAttribute(
|
||||
var AElementValue: TValue;
|
||||
const APropertyName: string;
|
||||
const ASerializerObject: TObject;
|
||||
const AAttributes: TArray<TCustomAttribute>
|
||||
);
|
||||
procedure TMVCStringDictionarySerializer.DeserializeAttribute(var AElementValue: TValue; const APropertyName: string;
|
||||
const ASerializerObject: TObject; const AAttributes: TArray<TCustomAttribute>);
|
||||
var
|
||||
lStringDict: TMVCStringDictionary;
|
||||
lJSON: TJDOJsonObject;
|
||||
@ -216,15 +178,12 @@ begin
|
||||
lJSON := ASerializerObject as TJDOJsonObject;
|
||||
for i := 0 to lJSON.O[APropertyName].Count - 1 do
|
||||
begin
|
||||
lStringDict.AddProperty(lJSON.Names[i], lJSON.S[lJSON.Names[i]])
|
||||
lStringDict.Add(lJSON.Names[i], lJSON.S[lJSON.Names[i]])
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TMVCStringDictionarySerializer.DeserializeRoot(
|
||||
const ASerializerObject: TObject;
|
||||
const AObject: TObject;
|
||||
const AAttributes: TArray<TCustomAttribute>
|
||||
);
|
||||
procedure TMVCStringDictionarySerializer.DeserializeRoot(const ASerializerObject: TObject; const AObject: TObject;
|
||||
const AAttributes: TArray<TCustomAttribute>);
|
||||
var
|
||||
lStringDict: TMVCStringDictionary;
|
||||
lJSON: TJDOJsonObject;
|
||||
@ -234,17 +193,26 @@ begin
|
||||
lJSON := ASerializerObject as TJDOJsonObject;
|
||||
for i := 0 to lJSON.Count - 1 do
|
||||
begin
|
||||
lStringDict.AddProperty(lJSON.Names[i], lJSON.S[lJSON.Names[i]])
|
||||
lStringDict.Add(lJSON.Names[i], lJSON.S[lJSON.Names[i]])
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TMVCStringDictionarySerializer.SerializeAttribute(
|
||||
const AElementValue: TValue; const APropertyName: string;
|
||||
const ASerializerObject: TObject;
|
||||
const AAttributes: TArray<TCustomAttribute>);
|
||||
class procedure TMVCStringDictionarySerializer.Serialize(const ADict: TMVCStringDictionary;
|
||||
const AJSONObject: TJsonObject);
|
||||
var
|
||||
lPair: TPair<String, String>;
|
||||
begin
|
||||
for lPair in ADict do
|
||||
begin
|
||||
AJSONObject.S[lPair.Key] := lPair.Value;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TMVCStringDictionarySerializer.SerializeAttribute(const AElementValue: TValue; const APropertyName: string;
|
||||
const ASerializerObject: TObject; const AAttributes: TArray<TCustomAttribute>);
|
||||
var
|
||||
lStringDict: TMVCStringDictionary;
|
||||
lPair: TPair<string, string>;
|
||||
// lPair: TPair<string, string>;
|
||||
lOutObject: TJsonObject;
|
||||
lJsonDict: TJsonObject;
|
||||
begin
|
||||
@ -254,28 +222,30 @@ begin
|
||||
lJsonDict := lOutObject.O[APropertyName];
|
||||
if Assigned(lStringDict) then
|
||||
begin
|
||||
for lPair in lStringDict do
|
||||
begin
|
||||
lJsonDict.S[lPair.Key] := lPair.Value;
|
||||
end;
|
||||
Serialize(lStringDict, lJsonDict);
|
||||
// for lPair in lStringDict do
|
||||
// begin
|
||||
// lJsonDict.S[lPair.Key] := lPair.Value;
|
||||
// end;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TMVCStringDictionarySerializer.SerializeRoot(const AObject: TObject;
|
||||
out ASerializerObject: TObject; const AAttributes: TArray<TCustomAttribute>);
|
||||
procedure TMVCStringDictionarySerializer.SerializeRoot(const AObject: TObject; out ASerializerObject: TObject;
|
||||
const AAttributes: TArray<TCustomAttribute>; const ASerializationAction: TMVCSerializationAction = nil);
|
||||
var
|
||||
lStringDict: TMVCStringDictionary;
|
||||
lPair: TPair<string, string>;
|
||||
//lPair: TPair<string, string>;
|
||||
lOutObject: TJsonObject;
|
||||
begin
|
||||
lStringDict := AObject as TMVCStringDictionary;
|
||||
lOutObject := TJsonObject.Create;
|
||||
if Assigned(lStringDict) then
|
||||
begin
|
||||
for lPair in lStringDict do
|
||||
begin
|
||||
lOutObject.S[lPair.Key] := lPair.Value;
|
||||
end;
|
||||
Serialize(lStringDict, lOutObject);
|
||||
// for lPair in lStringDict do
|
||||
// begin
|
||||
// lOutObject.S[lPair.Key] := lPair.Value;
|
||||
// end;
|
||||
end;
|
||||
ASerializerObject := lOutObject;
|
||||
end;
|
||||
|
@ -39,6 +39,7 @@ uses
|
||||
Data.SqlTimSt,
|
||||
Data.FmtBcd,
|
||||
Data.DB,
|
||||
MVCFramework.Commons,
|
||||
MVCFramework.Serializer.Intf,
|
||||
MVCFramework.Serializer.Abstract,
|
||||
MVCFramework.Serializer.Commons,
|
||||
@ -48,20 +49,30 @@ uses
|
||||
|
||||
type
|
||||
TMVCJsonDataObjectsSerializer = class(TMVCAbstractSerializer, IMVCSerializer)
|
||||
private
|
||||
fStringDictionarySerializer: IMVCTypeSerializer;
|
||||
public
|
||||
procedure ObjectToJsonObject(const AObject: TObject; const AJsonObject: TJDOJsonObject;
|
||||
const AType: TMVCSerializationType; const AIgnoredAttributes: TMVCIgnoredList);
|
||||
procedure InternalObjectToJsonObject(const AObject: TObject; const AJsonObject: TJDOJsonObject;
|
||||
const AType: TMVCSerializationType; const AIgnoredAttributes: TMVCIgnoredList;
|
||||
const ASerializationAction: TMVCSerializationAction; const Dict: TMVCStringDictionary;
|
||||
const Serializer: IMVCTypeSerializer);
|
||||
procedure ListToJsonArray(const AList: IMVCList; const AJsonArray: TJDOJsonArray;
|
||||
const AType: TMVCSerializationType; const AIgnoredAttributes: TMVCIgnoredList);
|
||||
procedure AttributeToJsonDataValue(const AJsonObject: TJDOJsonObject; const AName: string; const AValue: TValue;
|
||||
const AType: TMVCSerializationType; const AIgnoredAttributes: TMVCIgnoredList;
|
||||
const ASerializationAction: TMVCSerializationAction = nil);
|
||||
procedure AttributeToJsonDataValue(const AJsonObject: TJDOJsonObject; const AName: string;
|
||||
const AValue: TValue;
|
||||
const AType: TMVCSerializationType; const AIgnored: TMVCIgnoredList;
|
||||
const ACustomAttributes: TArray<TCustomAttribute>);
|
||||
procedure JsonObjectToObject(const AJsonObject: TJDOJsonObject; const AObject: TObject;
|
||||
const AType: TMVCSerializationType; const AIgnoredAttributes: TMVCIgnoredList);
|
||||
procedure JsonDataValueToAttribute(const AJsonObject: TJDOJsonObject; const AName: string; var AValue: TValue;
|
||||
procedure JsonDataValueToAttribute(const AJsonObject: TJDOJsonObject; const AName: string;
|
||||
var AValue: TValue;
|
||||
const AType: TMVCSerializationType; const AIgnored: TMVCIgnoredList;
|
||||
const ACustomAttributes: TArray<TCustomAttribute>);
|
||||
procedure JsonArrayToList(const AJsonArray: TJDOJsonArray; const AList: IMVCList; const AClazz: TClass;
|
||||
procedure JsonArrayToList(const AJsonArray: TJDOJsonArray; const AList: IMVCList;
|
||||
const AClazz: TClass;
|
||||
const AType: TMVCSerializationType; const AIgnoredAttributes: TMVCIgnoredList);
|
||||
procedure DataSetToJsonObject(const ADataSet: TDataSet; const AJsonObject: TJDOJsonObject;
|
||||
const ANameCase: TMVCNameCase; const AIgnoredFields: TMVCIgnoredList);
|
||||
@ -77,27 +88,38 @@ type
|
||||
const ASerializationAction: TMVCSerializationAction = nil): string;
|
||||
|
||||
function SerializeObjectToJSON(const AObject: TObject; const AType: TMVCSerializationType;
|
||||
const AIgnoredAttributes: TMVCIgnoredList; const ASerializationAction: TMVCSerializationAction): TJDOJsonObject;
|
||||
const AIgnoredAttributes: TMVCIgnoredList;
|
||||
const ASerializationAction: TMVCSerializationAction): TJDOJsonObject;
|
||||
|
||||
function SerializeCollection(const AList: TObject; const AType: TMVCSerializationType = stDefault;
|
||||
const AIgnoredAttributes: TMVCIgnoredList = []): string;
|
||||
function SerializeCollection(const AList: TObject;
|
||||
const AType: TMVCSerializationType = stDefault;
|
||||
const AIgnoredAttributes: TMVCIgnoredList = [];
|
||||
const ASerializationAction: TMVCSerializationAction = nil): string;
|
||||
|
||||
function SerializeDataSet(const ADataSet: TDataSet; const AIgnoredFields: TMVCIgnoredList = [];
|
||||
const ANameCase: TMVCNameCase = ncAsIs): string;
|
||||
function SerializeDataSet(const ADataSet: TDataSet;
|
||||
const AIgnoredFields: TMVCIgnoredList = [];
|
||||
const ANameCase: TMVCNameCase = ncAsIs;
|
||||
const ASerializationAction: TMVCDatasetSerializationAction = nil): string;
|
||||
|
||||
function SerializeDataSetRecord(const ADataSet: TDataSet; const AIgnoredFields: TMVCIgnoredList = [];
|
||||
const ANameCase: TMVCNameCase = ncAsIs): string;
|
||||
function SerializeDataSetRecord(const ADataSet: TDataSet;
|
||||
const AIgnoredFields: TMVCIgnoredList = [];
|
||||
const ANameCase: TMVCNameCase = ncAsIs;
|
||||
const ASerializationAction: TMVCDatasetSerializationAction = nil): string;
|
||||
|
||||
procedure DeserializeObject(const ASerializedObject: string; const AObject: TObject;
|
||||
const AType: TMVCSerializationType = stDefault; const AIgnoredAttributes: TMVCIgnoredList = []);
|
||||
const AType: TMVCSerializationType = stDefault;
|
||||
const AIgnoredAttributes: TMVCIgnoredList = []);
|
||||
|
||||
procedure DeserializeCollection(const ASerializedList: string; const AList: TObject; const AClazz: TClass;
|
||||
const AType: TMVCSerializationType = stDefault; const AIgnoredAttributes: TMVCIgnoredList = []);
|
||||
procedure DeserializeCollection(const ASerializedList: string; const AList: TObject;
|
||||
const AClazz: TClass;
|
||||
const AType: TMVCSerializationType = stDefault;
|
||||
const AIgnoredAttributes: TMVCIgnoredList = []);
|
||||
|
||||
procedure DeserializeDataSet(const ASerializedDataSet: string; const ADataSet: TDataSet;
|
||||
const AIgnoredFields: TMVCIgnoredList = []; const ANameCase: TMVCNameCase = ncAsIs);
|
||||
|
||||
procedure DeserializeDataSetRecord(const ASerializedDataSetRecord: string; const ADataSet: TDataSet;
|
||||
procedure DeserializeDataSetRecord(const ASerializedDataSetRecord: string;
|
||||
const ADataSet: TDataSet;
|
||||
const AIgnoredFields: TMVCIgnoredList = []; const ANameCase: TMVCNameCase = ncAsIs);
|
||||
class function ParseObject(const AString: string): TJDOJsonObject;
|
||||
class function ParseArray(const AString: string): TJDOJsonArray;
|
||||
@ -106,7 +128,8 @@ type
|
||||
procedure AfterConstruction; override;
|
||||
end;
|
||||
|
||||
procedure TValueToJsonElement(const Value: TValue; const JSON: TJDOJsonObject; const KeyName: string);
|
||||
procedure TValueToJsonElement(const Value: TValue; const JSON: TJDOJsonObject;
|
||||
const KeyName: string);
|
||||
function StringToJSON(const AValue: string): TJDOJsonObject;
|
||||
procedure JsonObjectToObject(const AJsonObject: TJDOJsonObject; const AObject: TObject;
|
||||
const AType: TMVCSerializationType; const AIgnoredAttributes: TMVCIgnoredList);
|
||||
@ -115,7 +138,6 @@ implementation
|
||||
|
||||
uses
|
||||
MVCFramework.Serializer.JsonDataObjects.CustomTypes,
|
||||
MVCFramework.Commons,
|
||||
MVCFramework.Logger,
|
||||
System.SysUtils;
|
||||
|
||||
@ -131,10 +153,12 @@ begin
|
||||
GetTypeSerializers.Add(TypeInfo(TStringStream), lStreamSerializer);
|
||||
GetTypeSerializers.Add(TypeInfo(TFileStream), lStreamSerializer);
|
||||
GetTypeSerializers.Add(TypeInfo(TMemoryStream), lStreamSerializer);
|
||||
fStringDictionarySerializer := TMVCStringDictionarySerializer.Create;
|
||||
GetTypeSerializers.Add(TypeInfo(TMVCStringDictionary), TMVCStringDictionarySerializer.Create);
|
||||
end;
|
||||
|
||||
procedure TMVCJsonDataObjectsSerializer.AttributeToJsonDataValue(const AJsonObject: TJDOJsonObject; const AName: string;
|
||||
procedure TMVCJsonDataObjectsSerializer.AttributeToJsonDataValue(const AJsonObject: TJDOJsonObject;
|
||||
const AName: string;
|
||||
const AValue: TValue; const AType: TMVCSerializationType; const AIgnored: TMVCIgnoredList;
|
||||
const ACustomAttributes: TArray<TCustomAttribute>);
|
||||
var
|
||||
@ -154,7 +178,8 @@ begin
|
||||
|
||||
if GetTypeSerializers.ContainsKey(AValue.TypeInfo) then
|
||||
begin
|
||||
GetTypeSerializers.Items[AValue.TypeInfo].SerializeAttribute(AValue, AName, AJsonObject, ACustomAttributes);
|
||||
GetTypeSerializers.Items[AValue.TypeInfo].SerializeAttribute(AValue, AName, AJsonObject,
|
||||
ACustomAttributes);
|
||||
Exit;
|
||||
end;
|
||||
|
||||
@ -228,19 +253,26 @@ begin
|
||||
begin
|
||||
ChildJsonArray := AJsonObject.A[AName];
|
||||
for Obj in ChildList do
|
||||
begin
|
||||
if Assigned(Obj) then
|
||||
ObjectToJsonObject(Obj, ChildJsonArray.AddObject, GetSerializationType(Obj, AType), AIgnored);
|
||||
begin
|
||||
ObjectToJsonObject(Obj, ChildJsonArray.AddObject,
|
||||
GetSerializationType(Obj, AType), AIgnored);
|
||||
end;
|
||||
end;
|
||||
end
|
||||
else
|
||||
begin
|
||||
ChildJsonObject := AJsonObject.O[AName];
|
||||
ObjectToJsonObject(ChildObject, ChildJsonObject, GetSerializationType(ChildObject, AType), AIgnored);
|
||||
ObjectToJsonObject(ChildObject, ChildJsonObject, GetSerializationType(ChildObject,
|
||||
AType), AIgnored);
|
||||
end;
|
||||
end;
|
||||
end
|
||||
else
|
||||
begin
|
||||
if TMVCSerializerHelper.AttributeExists<MVCSerializeAsStringAttribute>(ACustomAttributes) then
|
||||
if TMVCSerializerHelper.AttributeExists<MVCSerializeAsStringAttribute>(ACustomAttributes)
|
||||
then
|
||||
AJsonObject.S[AName] := EmptyStr
|
||||
else
|
||||
AJsonObject[AName] := Null;
|
||||
@ -255,25 +287,29 @@ begin
|
||||
end
|
||||
else if (AValue.TypeInfo = System.TypeInfo(TValue)) then
|
||||
begin
|
||||
if TMVCSerializerHelper.AttributeExists<MVCValueAsTypeAttribute>(ACustomAttributes, ValueTypeAtt) then
|
||||
if TMVCSerializerHelper.AttributeExists<MVCValueAsTypeAttribute>(ACustomAttributes,
|
||||
ValueTypeAtt) then
|
||||
begin
|
||||
CastValue := AValue.AsType<TValue>;
|
||||
if CastValue.TryCast(ValueTypeAtt.ValueTypeInfo, CastedValue) then
|
||||
AttributeToJsonDataValue(AJsonObject, AName, CastedValue, stDefault, [], [])
|
||||
else
|
||||
raise EMVCSerializationException.CreateFmt
|
||||
('Cannot serialize %s of TypeKind tkRecord (TValue with MVCValueAsTypeAttribute).', [AName]);
|
||||
('Cannot serialize %s of TypeKind tkRecord (TValue with MVCValueAsTypeAttribute).',
|
||||
[AName]);
|
||||
end
|
||||
else
|
||||
begin
|
||||
ChildValue := AValue.AsType<TValue>;
|
||||
ChildJsonObject := AJsonObject.O[AName];
|
||||
ChildJsonObject.S['type'] := TMVCSerializerHelper.GetTypeKindAsString(ChildValue.TypeInfo.Kind);
|
||||
ChildJsonObject.S['type'] := TMVCSerializerHelper.GetTypeKindAsString
|
||||
(ChildValue.TypeInfo.Kind);
|
||||
AttributeToJsonDataValue(ChildJsonObject, 'value', ChildValue, stDefault, [], []);
|
||||
end;
|
||||
end
|
||||
else
|
||||
raise EMVCSerializationException.CreateFmt('Cannot serialize %s of TypeKind tkRecord.', [AName]);
|
||||
raise EMVCSerializationException.CreateFmt
|
||||
('Cannot serialize %s of TypeKind tkRecord.', [AName]);
|
||||
end;
|
||||
|
||||
tkSet:
|
||||
@ -281,15 +317,18 @@ begin
|
||||
|
||||
tkArray, tkDynArray:
|
||||
begin
|
||||
raise EMVCSerializationException.CreateFmt('Cannot serialize %s of TypeKind tkArray or tkDynArray.', [AName]);
|
||||
raise EMVCSerializationException.CreateFmt
|
||||
('Cannot serialize %s of TypeKind tkArray or tkDynArray.', [AName]);
|
||||
end;
|
||||
|
||||
tkUnknown:
|
||||
raise EMVCSerializationException.CreateFmt('Cannot serialize %s of TypeKind tkUnknown.', [AName]);
|
||||
raise EMVCSerializationException.CreateFmt
|
||||
('Cannot serialize %s of TypeKind tkUnknown.', [AName]);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TMVCJsonDataObjectsSerializer.DataSetToJsonArray(const ADataSet: TDataSet; const AJsonArray: TJDOJsonArray;
|
||||
procedure TMVCJsonDataObjectsSerializer.DataSetToJsonArray(const ADataSet: TDataSet;
|
||||
const AJsonArray: TJDOJsonArray;
|
||||
const ANameCase: TMVCNameCase; const AIgnoredFields: TMVCIgnoredList);
|
||||
var
|
||||
LJObj: TJDOJsonObject;
|
||||
@ -302,7 +341,8 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TMVCJsonDataObjectsSerializer.DataSetToJsonObject(const ADataSet: TDataSet; const AJsonObject: TJDOJsonObject;
|
||||
procedure TMVCJsonDataObjectsSerializer.DataSetToJsonObject(const ADataSet: TDataSet;
|
||||
const AJsonObject: TJDOJsonObject;
|
||||
const ANameCase: TMVCNameCase; const AIgnoredFields: TMVCIgnoredList);
|
||||
var
|
||||
I: Integer;
|
||||
@ -358,7 +398,8 @@ begin
|
||||
AJsonObject.S[FieldName] := DateTimeToISOTimeStamp(ADataSet.Fields[I].AsDateTime);
|
||||
|
||||
ftTime:
|
||||
AJsonObject.S[FieldName] := SQLTimeStampToStr('hh:nn:ss', ADataSet.Fields[I].AsSQLTimeStamp);
|
||||
AJsonObject.S[FieldName] := SQLTimeStampToStr('hh:nn:ss',
|
||||
ADataSet.Fields[I].AsSQLTimeStamp);
|
||||
|
||||
ftTimeStamp:
|
||||
AJsonObject.S[FieldName] :=
|
||||
@ -406,21 +447,25 @@ begin
|
||||
dtObject:
|
||||
begin
|
||||
ChildJsonObject := AJsonObject.O[FieldName];
|
||||
DataSetToJsonObject(NestedDataSet, ChildJsonObject, GetNameCase(NestedDataSet, ANameCase),
|
||||
DataSetToJsonObject(NestedDataSet, ChildJsonObject,
|
||||
GetNameCase(NestedDataSet, ANameCase),
|
||||
AIgnoredFields);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
else
|
||||
raise EMVCSerializationException.CreateFmt('Cannot find type for field "%s"', [FieldName]);
|
||||
raise EMVCSerializationException.CreateFmt('Cannot find type for field "%s"',
|
||||
[FieldName]);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TMVCJsonDataObjectsSerializer.DeserializeCollection(const ASerializedList: string; const AList: TObject;
|
||||
const AClazz: TClass; const AType: TMVCSerializationType; const AIgnoredAttributes: TMVCIgnoredList);
|
||||
procedure TMVCJsonDataObjectsSerializer.DeserializeCollection(const ASerializedList: string;
|
||||
const AList: TObject;
|
||||
const AClazz: TClass; const AType: TMVCSerializationType;
|
||||
const AIgnoredAttributes: TMVCIgnoredList);
|
||||
var
|
||||
JsonArray: TJDOJsonArray;
|
||||
ObjList: IMVCList;
|
||||
@ -443,7 +488,8 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TMVCJsonDataObjectsSerializer.DeserializeDataSet(const ASerializedDataSet: string; const ADataSet: TDataSet;
|
||||
procedure TMVCJsonDataObjectsSerializer.DeserializeDataSet(const ASerializedDataSet: string;
|
||||
const ADataSet: TDataSet;
|
||||
const AIgnoredFields: TMVCIgnoredList; const ANameCase: TMVCNameCase);
|
||||
var
|
||||
lJsonArray: TJDOJsonArray;
|
||||
@ -469,7 +515,8 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TMVCJsonDataObjectsSerializer.DeserializeDataSetRecord(const ASerializedDataSetRecord: string;
|
||||
procedure TMVCJsonDataObjectsSerializer.DeserializeDataSetRecord(const ASerializedDataSetRecord
|
||||
: string;
|
||||
const ADataSet: TDataSet; const AIgnoredFields: TMVCIgnoredList; const ANameCase: TMVCNameCase);
|
||||
var
|
||||
lJsonBase: TJDOJsonBaseObject;
|
||||
@ -494,7 +541,8 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TMVCJsonDataObjectsSerializer.JsonArrayToDataSet(const AJsonArray: TJDOJsonArray; const ADataSet: TDataSet;
|
||||
procedure TMVCJsonDataObjectsSerializer.JsonArrayToDataSet(const AJsonArray: TJDOJsonArray;
|
||||
const ADataSet: TDataSet;
|
||||
const AIgnoredFields: TMVCIgnoredList; const ANameCase: TMVCNameCase);
|
||||
var
|
||||
I: Integer;
|
||||
@ -507,8 +555,10 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TMVCJsonDataObjectsSerializer.JsonArrayToList(const AJsonArray: TJDOJsonArray; const AList: IMVCList;
|
||||
const AClazz: TClass; const AType: TMVCSerializationType; const AIgnoredAttributes: TMVCIgnoredList);
|
||||
procedure TMVCJsonDataObjectsSerializer.JsonArrayToList(const AJsonArray: TJDOJsonArray;
|
||||
const AList: IMVCList;
|
||||
const AClazz: TClass; const AType: TMVCSerializationType;
|
||||
const AIgnoredAttributes: TMVCIgnoredList);
|
||||
var
|
||||
I: Integer;
|
||||
Obj: TObject;
|
||||
@ -516,12 +566,14 @@ begin
|
||||
for I := 0 to Pred(AJsonArray.Count) do
|
||||
begin
|
||||
Obj := TMVCSerializerHelper.CreateObject(AClazz.QualifiedClassName);
|
||||
JsonObjectToObject(AJsonArray.Items[I].ObjectValue, Obj, GetSerializationType(Obj, AType), AIgnoredAttributes);
|
||||
JsonObjectToObject(AJsonArray.Items[I].ObjectValue, Obj, GetSerializationType(Obj, AType),
|
||||
AIgnoredAttributes);
|
||||
AList.Add(Obj);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TMVCJsonDataObjectsSerializer.JsonDataValueToAttribute(const AJsonObject: TJDOJsonObject; const AName: string;
|
||||
procedure TMVCJsonDataObjectsSerializer.JsonDataValueToAttribute(const AJsonObject: TJDOJsonObject;
|
||||
const AName: string;
|
||||
var AValue: TValue; const AType: TMVCSerializationType; const AIgnored: TMVCIgnoredList;
|
||||
const ACustomAttributes: TArray<TCustomAttribute>);
|
||||
var
|
||||
@ -542,10 +594,12 @@ begin
|
||||
AJsonObject[AName].ObjectValue, ACustomAttributes);
|
||||
end;
|
||||
jdtArray:
|
||||
GetTypeSerializers.Items[AValue.TypeInfo].DeserializeAttribute(AValue, AName, AJsonObject[AName].ArrayValue,
|
||||
GetTypeSerializers.Items[AValue.TypeInfo].DeserializeAttribute(AValue, AName,
|
||||
AJsonObject[AName].ArrayValue,
|
||||
ACustomAttributes);
|
||||
else
|
||||
GetTypeSerializers.Items[AValue.TypeInfo].DeserializeAttribute(AValue, AName, AJsonObject, ACustomAttributes);
|
||||
GetTypeSerializers.Items[AValue.TypeInfo].DeserializeAttribute(AValue, AName, AJsonObject,
|
||||
ACustomAttributes);
|
||||
end;
|
||||
Exit;
|
||||
end;
|
||||
@ -566,7 +620,8 @@ begin
|
||||
AValue := TValue.From<TTime>(ISOTimeToTime(AJsonObject[AName].Value))
|
||||
|
||||
else if (AValue.Kind = tkEnumeration) then
|
||||
TValue.Make(GetEnumValue(AValue.TypeInfo, AJsonObject[AName].Value), AValue.TypeInfo, AValue)
|
||||
TValue.Make(GetEnumValue(AValue.TypeInfo, AJsonObject[AName].Value),
|
||||
AValue.TypeInfo, AValue)
|
||||
|
||||
else
|
||||
AValue := TValue.From<string>(AJsonObject[AName].Value);
|
||||
@ -604,7 +659,8 @@ begin
|
||||
if AJsonObject[AName].ObjectValue <> nil then
|
||||
begin
|
||||
ChildObject := AValue.AsObject;
|
||||
JsonObjectToObject(AJsonObject.O[AName], ChildObject, GetSerializationType(ChildObject, AType), AIgnored);
|
||||
JsonObjectToObject(AJsonObject.O[AName], ChildObject, GetSerializationType(ChildObject,
|
||||
AType), AIgnored);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
@ -619,8 +675,10 @@ begin
|
||||
else
|
||||
begin
|
||||
ChildList := TDuckTypedList.Wrap(ChildObject);
|
||||
if TMVCSerializerHelper.AttributeExists<MVCListOfAttribute>(ACustomAttributes, ChildListOfAtt) then
|
||||
JsonArrayToList(AJsonObject.A[AName], ChildList, ChildListOfAtt.Value, AType, AIgnored)
|
||||
if TMVCSerializerHelper.AttributeExists<MVCListOfAttribute>(ACustomAttributes,
|
||||
ChildListOfAtt) then
|
||||
JsonArrayToList(AJsonObject.A[AName], ChildList, ChildListOfAtt.Value,
|
||||
AType, AIgnored)
|
||||
else
|
||||
raise EMVCDeserializationException.CreateFmt
|
||||
('You can not deserialize a list %s without the MVCListOf attribute.', [AName]);
|
||||
@ -630,7 +688,8 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TMVCJsonDataObjectsSerializer.JsonObjectToDataSet(const AJsonObject: TJDOJsonObject; const ADataSet: TDataSet;
|
||||
procedure TMVCJsonDataObjectsSerializer.JsonObjectToDataSet(const AJsonObject: TJDOJsonObject;
|
||||
const ADataSet: TDataSet;
|
||||
const AIgnoredFields: TMVCIgnoredList; const ANameCase: TMVCNameCase);
|
||||
var
|
||||
Field: TField;
|
||||
@ -645,7 +704,8 @@ begin
|
||||
begin
|
||||
name := GetNameAs(ADataSet.Owner, Field.Name, Field.FieldName);
|
||||
|
||||
if (IsIgnoredAttribute(AIgnoredFields, name)) or (IsIgnoredComponent(ADataSet.Owner, Field.Name)) then
|
||||
if (IsIgnoredAttribute(AIgnoredFields, name)) or
|
||||
(IsIgnoredComponent(ADataSet.Owner, Field.Name)) then
|
||||
Continue;
|
||||
|
||||
case GetNameCase(ADataSet, ANameCase) of
|
||||
@ -658,7 +718,8 @@ begin
|
||||
if not AJsonObject.Contains(name) then
|
||||
Continue;
|
||||
|
||||
if (AJsonObject[name].Typ = jdtObject) and (AJsonObject.Values[name].ObjectValue = nil) then // Nullable Type
|
||||
if (AJsonObject[name].Typ = jdtObject) and (AJsonObject.Values[name].ObjectValue = nil) then
|
||||
// Nullable Type
|
||||
begin
|
||||
Field.Clear;
|
||||
Continue;
|
||||
@ -732,19 +793,22 @@ begin
|
||||
dtObject:
|
||||
begin
|
||||
NestedDataSet.Edit;
|
||||
JsonObjectToDataSet(AJsonObject.O[name], NestedDataSet, AIgnoredFields, ANameCase);
|
||||
JsonObjectToDataSet(AJsonObject.O[name], NestedDataSet, AIgnoredFields,
|
||||
ANameCase);
|
||||
NestedDataSet.Post;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
else
|
||||
raise EMVCDeserializationException.CreateFmt('Cannot find type for field "%s"', [Field.FieldName]);
|
||||
raise EMVCDeserializationException.CreateFmt('Cannot find type for field "%s"',
|
||||
[Field.FieldName]);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TMVCJsonDataObjectsSerializer.JsonObjectToObject(const AJsonObject: TJDOJsonObject; const AObject: TObject;
|
||||
procedure TMVCJsonDataObjectsSerializer.JsonObjectToObject(const AJsonObject: TJDOJsonObject;
|
||||
const AObject: TObject;
|
||||
const AType: TMVCSerializationType; const AIgnoredAttributes: TMVCIgnoredList);
|
||||
var
|
||||
ObjType: TRttiType;
|
||||
@ -772,7 +836,8 @@ begin
|
||||
begin
|
||||
AttributeValue := Prop.GetValue(AObject);
|
||||
lKeyName := TMVCSerializerHelper.GetKeyName(Prop, ObjType);
|
||||
JsonDataValueToAttribute(AJsonObject, lKeyName, AttributeValue, AType, AIgnoredAttributes,
|
||||
JsonDataValueToAttribute(AJsonObject, lKeyName, AttributeValue, AType,
|
||||
AIgnoredAttributes,
|
||||
Prop.GetAttributes);
|
||||
if (not AttributeValue.IsEmpty) and Prop.IsWritable then
|
||||
Prop.SetValue(AObject, AttributeValue);
|
||||
@ -794,7 +859,8 @@ begin
|
||||
begin
|
||||
AttributeValue := Fld.GetValue(AObject);
|
||||
lKeyName := TMVCSerializerHelper.GetKeyName(Fld, ObjType);
|
||||
JsonDataValueToAttribute(AJsonObject, lKeyName, AttributeValue, AType, AIgnoredAttributes,
|
||||
JsonDataValueToAttribute(AJsonObject, lKeyName, AttributeValue, AType,
|
||||
AIgnoredAttributes,
|
||||
Fld.GetAttributes);
|
||||
if not AttributeValue.IsEmpty then
|
||||
Fld.SetValue(AObject, AttributeValue);
|
||||
@ -809,26 +875,59 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TMVCJsonDataObjectsSerializer.ListToJsonArray(const AList: IMVCList; const AJsonArray: TJDOJsonArray;
|
||||
const AType: TMVCSerializationType; const AIgnoredAttributes: TMVCIgnoredList);
|
||||
procedure TMVCJsonDataObjectsSerializer.ListToJsonArray(const AList: IMVCList;
|
||||
const AJsonArray: TJDOJsonArray;
|
||||
const AType: TMVCSerializationType; const AIgnoredAttributes: TMVCIgnoredList;
|
||||
const ASerializationAction: TMVCSerializationAction);
|
||||
var
|
||||
I: Integer;
|
||||
lDict: TMVCStringDictionary;
|
||||
lSer: IMVCTypeSerializer;
|
||||
begin
|
||||
if not Assigned(AList) then
|
||||
raise EMVCSerializationException.Create('List not assigned');
|
||||
for I := 0 to Pred(AList.Count) do
|
||||
if Assigned(ASerializationAction) then
|
||||
begin
|
||||
ObjectToJsonObject(AList.GetItem(I), AJsonArray.AddObject, AType, AIgnoredAttributes);
|
||||
lDict := TMVCStringDictionary.Create;
|
||||
try
|
||||
for I := 0 to Pred(AList.Count) do
|
||||
begin
|
||||
lDict.Clear;
|
||||
InternalObjectToJsonObject(AList.GetItem(I), AJsonArray.AddObject, AType, AIgnoredAttributes,
|
||||
ASerializationAction, lDict, lSer);
|
||||
end;
|
||||
finally
|
||||
lDict.Free;
|
||||
end;
|
||||
end
|
||||
else
|
||||
begin
|
||||
for I := 0 to Pred(AList.Count) do
|
||||
begin
|
||||
InternalObjectToJsonObject(AList.GetItem(I), AJsonArray.AddObject, AType, AIgnoredAttributes,
|
||||
nil, nil, nil);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TMVCJsonDataObjectsSerializer.ObjectToJsonObject(const AObject: TObject; const AJsonObject: TJDOJsonObject;
|
||||
procedure TMVCJsonDataObjectsSerializer.ObjectToJsonObject(const AObject: TObject;
|
||||
const AJsonObject: TJDOJsonObject;
|
||||
const AType: TMVCSerializationType; const AIgnoredAttributes: TMVCIgnoredList);
|
||||
begin
|
||||
InternalObjectToJsonObject(AObject, AJsonObject, AType, AIgnoredAttributes, nil, nil, nil);
|
||||
end;
|
||||
|
||||
procedure TMVCJsonDataObjectsSerializer.InternalObjectToJsonObject(const AObject: TObject;
|
||||
const AJsonObject: TJDOJsonObject; const AType: TMVCSerializationType;
|
||||
const AIgnoredAttributes: TMVCIgnoredList;
|
||||
const ASerializationAction: TMVCSerializationAction; const Dict: TMVCStringDictionary;
|
||||
const Serializer: IMVCTypeSerializer);
|
||||
var
|
||||
ObjType: TRttiType;
|
||||
Prop: TRttiProperty;
|
||||
Fld: TRttiField;
|
||||
begin
|
||||
{ TODO -oDanieleT -cGeneral : Find a way to automatically add HATEOS }
|
||||
ObjType := GetRttiContext.GetType(AObject.ClassType);
|
||||
case AType of
|
||||
stDefault, stProperties:
|
||||
@ -852,10 +951,17 @@ begin
|
||||
for Fld in ObjType.GetFields do
|
||||
if (not TMVCSerializerHelper.HasAttribute<MVCDoNotSerializeAttribute>(Fld)) and
|
||||
(not IsIgnoredAttribute(AIgnoredAttributes, Fld.Name)) then
|
||||
AttributeToJsonDataValue(AJsonObject, TMVCSerializerHelper.GetKeyName(Fld, ObjType), Fld.GetValue(AObject),
|
||||
AttributeToJsonDataValue(AJsonObject, TMVCSerializerHelper.GetKeyName(Fld, ObjType),
|
||||
Fld.GetValue(AObject),
|
||||
AType, AIgnoredAttributes, Fld.GetAttributes);
|
||||
end;
|
||||
end;
|
||||
|
||||
if Assigned(ASerializationAction) then
|
||||
begin
|
||||
ASerializationAction(AObject, Dict);
|
||||
Serializer.SerializeAttribute(Dict, TMVCConstants.HATEOS_PROP_NAME, AJsonObject, []);
|
||||
end;
|
||||
end;
|
||||
|
||||
class function TMVCJsonDataObjectsSerializer.Parse<T>(const AString: string): T;
|
||||
@ -875,12 +981,16 @@ begin
|
||||
Result := Parse<TJDOJsonObject>(AString);
|
||||
end;
|
||||
|
||||
function TMVCJsonDataObjectsSerializer.SerializeCollection(const AList: TObject; const AType: TMVCSerializationType;
|
||||
const AIgnoredAttributes: TMVCIgnoredList): string;
|
||||
function TMVCJsonDataObjectsSerializer.SerializeCollection(const AList: TObject;
|
||||
const AType: TMVCSerializationType;
|
||||
const AIgnoredAttributes: TMVCIgnoredList;
|
||||
const ASerializationAction: TMVCSerializationAction): string;
|
||||
var
|
||||
JsonArray: TJDOJsonArray;
|
||||
ObjList: IMVCList;
|
||||
Obj: TObject;
|
||||
lLinks: TMVCStringDictionary;
|
||||
lSer: IMVCTypeSerializer;
|
||||
begin
|
||||
Result := EmptyStr;
|
||||
|
||||
@ -895,11 +1005,32 @@ begin
|
||||
begin
|
||||
JsonArray := TJDOJsonArray.Create;
|
||||
try
|
||||
for Obj in ObjList do
|
||||
if Assigned(ASerializationAction) then
|
||||
begin
|
||||
if Assigned(Obj) then
|
||||
if not GetTypeSerializers.TryGetValue(TypeInfo(TMVCStringDictionary), lSer) then
|
||||
begin
|
||||
ObjectToJsonObject(Obj, JsonArray.AddObject, GetSerializationType(Obj, AType), AIgnoredAttributes);
|
||||
raise EMVCSerializationException.Create
|
||||
('Cannot serialize _links without TMVCStringDictionary custom serializer');
|
||||
end;
|
||||
|
||||
lLinks := TMVCStringDictionary.Create;
|
||||
try
|
||||
for Obj in ObjList do
|
||||
begin
|
||||
InternalObjectToJsonObject(Obj, JsonArray.AddObject, GetSerializationType(Obj, AType),
|
||||
AIgnoredAttributes,
|
||||
ASerializationAction, lLinks, lSer);
|
||||
end;
|
||||
finally
|
||||
lLinks.Free;
|
||||
end;
|
||||
end
|
||||
else
|
||||
begin
|
||||
for Obj in ObjList do
|
||||
begin
|
||||
ObjectToJsonObject(Obj, JsonArray.AddObject, GetSerializationType(Obj, AType),
|
||||
AIgnoredAttributes);
|
||||
end;
|
||||
end;
|
||||
Result := JsonArray.ToJSON(True);
|
||||
@ -909,39 +1040,66 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
function TMVCJsonDataObjectsSerializer.SerializeDataSet(const ADataSet: TDataSet; const AIgnoredFields: TMVCIgnoredList;
|
||||
const ANameCase: TMVCNameCase): string;
|
||||
function TMVCJsonDataObjectsSerializer.SerializeDataSet(
|
||||
const ADataSet: TDataSet;
|
||||
const AIgnoredFields: TMVCIgnoredList = [];
|
||||
const ANameCase: TMVCNameCase = ncAsIs;
|
||||
const ASerializationAction: TMVCDatasetSerializationAction = nil): string;
|
||||
var
|
||||
JsonArray: TJDOJsonArray;
|
||||
BookMark: TBookmark;
|
||||
lNameCase: TMVCNameCase;
|
||||
lLinks: TMVCStringDictionary;
|
||||
LJObj: TJsonObject;
|
||||
begin
|
||||
Result := EmptyStr;
|
||||
|
||||
if (not Assigned(ADataSet)) or (ADataSet.IsEmpty) then
|
||||
Exit;
|
||||
|
||||
JsonArray := TJDOJsonArray.Create;
|
||||
lLinks := nil;
|
||||
if Assigned(ASerializationAction) then
|
||||
begin
|
||||
lLinks := TMVCStringDictionary.Create;
|
||||
end;
|
||||
try
|
||||
BookMark := ADataSet.BookMark;
|
||||
lNameCase := GetNameCase(ADataSet, ANameCase);
|
||||
ADataSet.First;
|
||||
while not ADataSet.Eof do
|
||||
begin
|
||||
DataSetToJsonObject(ADataSet, JsonArray.AddObject, lNameCase, AIgnoredFields);
|
||||
ADataSet.Next;
|
||||
JsonArray := TJDOJsonArray.Create;
|
||||
try
|
||||
BookMark := ADataSet.BookMark;
|
||||
lNameCase := GetNameCase(ADataSet, ANameCase);
|
||||
ADataSet.First;
|
||||
while not ADataSet.Eof do
|
||||
begin
|
||||
LJObj := JsonArray.AddObject;
|
||||
DataSetToJsonObject(ADataSet, LJObj, lNameCase, AIgnoredFields);
|
||||
ADataSet.Next;
|
||||
|
||||
if Assigned(ASerializationAction) then
|
||||
begin
|
||||
lLinks.Clear;
|
||||
ASerializationAction(ADataSet, lLinks);
|
||||
TMVCStringDictionarySerializer(fStringDictionarySerializer).Serialize(lLinks, LJObj.O['_links']);
|
||||
end;
|
||||
end;
|
||||
Result := JsonArray.ToJSON(True);
|
||||
finally
|
||||
JsonArray.Free;
|
||||
if ADataSet.BookmarkValid(BookMark) then
|
||||
ADataSet.GotoBookmark(BookMark);
|
||||
ADataSet.FreeBookmark(BookMark);
|
||||
end;
|
||||
Result := JsonArray.ToJSON(True);
|
||||
finally
|
||||
JsonArray.Free;
|
||||
if ADataSet.BookmarkValid(BookMark) then
|
||||
ADataSet.GotoBookmark(BookMark);
|
||||
ADataSet.FreeBookmark(BookMark);
|
||||
if Assigned(ASerializationAction) then
|
||||
begin
|
||||
lLinks.Free;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
function TMVCJsonDataObjectsSerializer.SerializeDataSetRecord(const ADataSet: TDataSet;
|
||||
const AIgnoredFields: TMVCIgnoredList; const ANameCase: TMVCNameCase): string;
|
||||
const AIgnoredFields: TMVCIgnoredList = [];
|
||||
const ANameCase: TMVCNameCase = ncAsIs;
|
||||
const ASerializationAction: TMVCDatasetSerializationAction = nil): string;
|
||||
var
|
||||
JsonObject: TJDOJsonObject;
|
||||
begin
|
||||
@ -959,11 +1117,14 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
function TMVCJsonDataObjectsSerializer.SerializeObject(const AObject: TObject; const AType: TMVCSerializationType;
|
||||
const AIgnoredAttributes: TMVCIgnoredList; const ASerializationAction: TMVCSerializationAction): string;
|
||||
function TMVCJsonDataObjectsSerializer.SerializeObject(const AObject: TObject;
|
||||
const AType: TMVCSerializationType;
|
||||
const AIgnoredAttributes: TMVCIgnoredList;
|
||||
const ASerializationAction: TMVCSerializationAction): string;
|
||||
var
|
||||
JsonObject: TJDOJsonObject;
|
||||
ObjType: TRttiType;
|
||||
lDict: TMVCStringDictionary;
|
||||
begin
|
||||
Result := EmptyStr;
|
||||
|
||||
@ -994,15 +1155,33 @@ begin
|
||||
|
||||
JsonObject := TJDOJsonObject.Create;
|
||||
try
|
||||
ObjectToJsonObject(AObject, JsonObject, GetSerializationType(AObject, AType), AIgnoredAttributes);
|
||||
if Assigned(ASerializationAction) then
|
||||
begin
|
||||
lDict := TMVCStringDictionary.Create;
|
||||
try
|
||||
InternalObjectToJsonObject(AObject, JsonObject, GetSerializationType(AObject, AType),
|
||||
AIgnoredAttributes,
|
||||
ASerializationAction, lDict, fStringDictionarySerializer);
|
||||
finally
|
||||
lDict.Free;
|
||||
end;
|
||||
end
|
||||
else
|
||||
begin
|
||||
InternalObjectToJsonObject(AObject, JsonObject, GetSerializationType(AObject, AType),
|
||||
AIgnoredAttributes, nil,
|
||||
nil, nil);
|
||||
end;
|
||||
Result := JsonObject.ToJSON(True);
|
||||
finally
|
||||
JsonObject.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
function TMVCJsonDataObjectsSerializer.SerializeObjectToJSON(const AObject: TObject; const AType: TMVCSerializationType;
|
||||
const AIgnoredAttributes: TMVCIgnoredList; const ASerializationAction: TMVCSerializationAction): TJDOJsonObject;
|
||||
function TMVCJsonDataObjectsSerializer.SerializeObjectToJSON(const AObject: TObject;
|
||||
const AType: TMVCSerializationType;
|
||||
const AIgnoredAttributes: TMVCIgnoredList; const ASerializationAction: TMVCSerializationAction)
|
||||
: TJDOJsonObject;
|
||||
var
|
||||
JsonObject: TJDOJsonObject;
|
||||
ObjType: TRttiType;
|
||||
@ -1045,7 +1224,8 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TMVCJsonDataObjectsSerializer.DeserializeObject(const ASerializedObject: string; const AObject: TObject;
|
||||
procedure TMVCJsonDataObjectsSerializer.DeserializeObject(const ASerializedObject: string;
|
||||
const AObject: TObject;
|
||||
const AType: TMVCSerializationType; const AIgnoredAttributes: TMVCIgnoredList);
|
||||
var
|
||||
JsonObject: TJDOJsonObject;
|
||||
@ -1078,14 +1258,16 @@ begin
|
||||
end
|
||||
else
|
||||
begin
|
||||
JsonObjectToObject(JsonObject, AObject, GetSerializationType(AObject, AType), AIgnoredAttributes);
|
||||
JsonObjectToObject(JsonObject, AObject, GetSerializationType(AObject, AType),
|
||||
AIgnoredAttributes);
|
||||
end;
|
||||
finally
|
||||
JsonObject.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TValueToJsonElement(const Value: TValue; const JSON: TJDOJsonObject; const KeyName: string);
|
||||
procedure TValueToJsonElement(const Value: TValue; const JSON: TJDOJsonObject;
|
||||
const KeyName: string);
|
||||
var
|
||||
lSer: TMVCJsonDataObjectsSerializer;
|
||||
lMVCList: IMVCList;
|
||||
@ -1132,8 +1314,10 @@ begin
|
||||
lValueAsObjQualifClassName := lValueAsObj.QualifiedClassName.ToLower;
|
||||
if (lValueAsObj is TJDOJsonObject) or (lValueAsObj is TJsonObject)
|
||||
{$IFDEF RIOORBETTER} or
|
||||
{ this is for a bug in delphi103rio } (lValueAsObjQualifClassName = 'jsondataobjects.tjsonobject') or
|
||||
{ this is for a bug in delphi103rio } (lValueAsObj.QualifiedClassName = 'jsondataobjects.tjdojsonobject')
|
||||
{ this is for a bug in delphi103rio }
|
||||
(lValueAsObjQualifClassName = 'jsondataobjects.tjsonobject') or
|
||||
{ this is for a bug in delphi103rio }
|
||||
(lValueAsObj.QualifiedClassName = 'jsondataobjects.tjdojsonobject')
|
||||
{$ENDIF}
|
||||
then
|
||||
begin
|
||||
@ -1142,8 +1326,10 @@ begin
|
||||
end
|
||||
else if (lValueAsObj is TJDOJsonArray) or (lValueAsObj is TJsonArray)
|
||||
{$IFDEF RIOORBETTER} or
|
||||
{ this is for a bug in delphi103rio } (lValueAsObj.QualifiedClassName = 'jsondataobjects.tjsonarray') or
|
||||
{ this is for a bug in delphi103rio } (lValueAsObj.QualifiedClassName = 'jsondataobjects.tjdojsonarray')
|
||||
{ this is for a bug in delphi103rio }
|
||||
(lValueAsObj.QualifiedClassName = 'jsondataobjects.tjsonarray') or
|
||||
{ this is for a bug in delphi103rio }
|
||||
(lValueAsObj.QualifiedClassName = 'jsondataobjects.tjdojsonarray')
|
||||
{$ENDIF}
|
||||
then
|
||||
begin
|
||||
@ -1155,7 +1341,8 @@ begin
|
||||
lSer := TMVCJsonDataObjectsSerializer.Create;
|
||||
try
|
||||
JSON.A[KeyName] := TJDOJsonArray.Create;
|
||||
lSer.DataSetToJsonArray(TDataSet(lValueAsObj), JSON.A[KeyName], TMVCNameCase.ncLowerCase, []);
|
||||
lSer.DataSetToJsonArray(TDataSet(lValueAsObj), JSON.A[KeyName],
|
||||
TMVCNameCase.ncLowerCase, []);
|
||||
finally
|
||||
lSer.Free;
|
||||
end;
|
||||
@ -1174,7 +1361,8 @@ begin
|
||||
begin
|
||||
lSer := TMVCJsonDataObjectsSerializer.Create;
|
||||
try
|
||||
JSON.O[KeyName] := lSer.SerializeObjectToJSON(lValueAsObj, TMVCSerializationType.stProperties, [], nil);
|
||||
JSON.O[KeyName] := lSer.SerializeObjectToJSON(lValueAsObj,
|
||||
TMVCSerializationType.stProperties, [], nil);
|
||||
finally
|
||||
lSer.Free;
|
||||
end;
|
||||
|
@ -393,14 +393,32 @@ type
|
||||
procedure Render(const AObject: TObject; const AOwns: Boolean; const AType: TMVCSerializationType); overload;
|
||||
procedure Render(const ACollection: IMVCList); overload;
|
||||
procedure Render(const ACollection: IMVCList; const AType: TMVCSerializationType); overload;
|
||||
procedure Render(const ADataSet: TDataSet); overload;
|
||||
procedure Render(const ADataSet: TDataSet; const AOwns: Boolean); overload;
|
||||
procedure Render(const ADataSet: TDataSet; const AOwns: Boolean;
|
||||
const ASerializationType: TMVCDatasetSerializationType); overload;
|
||||
procedure Render(const ADataSet: TDataSet; const AOwns: Boolean; const AIgnoredFields: TMVCIgnoredList;
|
||||
const ASerializationType: TMVCDatasetSerializationType); overload;
|
||||
procedure Render(const ADataSet: TDataSet; const AOwns: Boolean; const AIgnoredFields: TMVCIgnoredList;
|
||||
const ANameCase: TMVCNameCase; const ASerializationType: TMVCDatasetSerializationType); overload;
|
||||
procedure Render(
|
||||
const ADataSet: TDataSet;
|
||||
const ASerializationAction: TMVCDatasetSerializationAction = nil
|
||||
); overload;
|
||||
procedure Render(
|
||||
const ADataSet: TDataSet;
|
||||
const AOwns: Boolean;
|
||||
const ASerializationAction: TMVCDatasetSerializationAction = nil); overload;
|
||||
procedure Render(
|
||||
const ADataSet: TDataSet;
|
||||
const AOwns: Boolean;
|
||||
const ASerializationType: TMVCDatasetSerializationType;
|
||||
const ASerializationAction: TMVCDatasetSerializationAction = nil); overload;
|
||||
procedure Render(
|
||||
const ADataSet: TDataSet;
|
||||
const AOwns: Boolean;
|
||||
const AIgnoredFields: TMVCIgnoredList;
|
||||
const ASerializationType: TMVCDatasetSerializationType;
|
||||
const ASerializationAction: TMVCDatasetSerializationAction = nil); overload;
|
||||
procedure Render(
|
||||
const ADataSet: TDataSet;
|
||||
const AOwns: Boolean;
|
||||
const AIgnoredFields: TMVCIgnoredList;
|
||||
const ANameCase: TMVCNameCase;
|
||||
const ASerializationType: TMVCDatasetSerializationType;
|
||||
const ASerializationAction: TMVCDatasetSerializationAction = nil); overload;
|
||||
procedure Render(const ATextWriter: TTextWriter; const AOwns: Boolean = True); overload;
|
||||
procedure Render(const AStream: TStream; const AOwns: Boolean = True); overload;
|
||||
procedure Render(const AErrorCode: Integer; const AErrorMessage: string;
|
||||
@ -453,23 +471,19 @@ type
|
||||
procedure RenderResponseStream; virtual;
|
||||
function ResponseStream: TStringBuilder;
|
||||
procedure Render(const AContent: string); overload;
|
||||
procedure Render(const AObject: TObject); overload;
|
||||
procedure Render(const AObject: TObject; const AOwns: Boolean); overload;
|
||||
procedure Render(const AObject: TObject; const AOwns: Boolean; const AType: TMVCSerializationType); overload;
|
||||
procedure Render<T: class>(const ACollection: TObjectList<T>); overload;
|
||||
procedure Render<T: class>(const ACollection: TObjectList<T>; const AOwns: Boolean); overload;
|
||||
//PODO renders
|
||||
procedure Render(const AObject: TObject; const ASerializationAction: TMVCSerializationAction = nil); overload;
|
||||
procedure Render(const AObject: TObject; const AOwns: Boolean; const ASerializationAction: TMVCSerializationAction = nil); overload;
|
||||
procedure Render(const AObject: TObject; const AOwns: Boolean; const AType: TMVCSerializationType; const ASerializationAction: TMVCSerializationAction = nil); overload;
|
||||
//PODOs Collection render
|
||||
procedure Render<T: class>(const ACollection: TObjectList<T>;
|
||||
const ASerializationAction: TMVCSerializationAction<T> = nil); overload;
|
||||
procedure Render<T: class>(const ACollection: TObjectList<T>; const AOwns: Boolean;
|
||||
const AType: TMVCSerializationType); overload;
|
||||
const ASerializationAction: TMVCSerializationAction<T> = nil); overload;
|
||||
procedure Render<T: class>(const ACollection: TObjectList<T>; const AOwns: Boolean;
|
||||
const AType: TMVCSerializationType; const ASerializationAction: TMVCSerializationAction<T> = nil); overload;
|
||||
procedure Render(const ACollection: IMVCList); overload;
|
||||
procedure Render(const ACollection: IMVCList; const AType: TMVCSerializationType); overload;
|
||||
procedure Render(const ADataSet: TDataSet); overload;
|
||||
procedure Render(const ADataSet: TDataSet; const AOwns: Boolean); overload;
|
||||
procedure Render(const ADataSet: TDataSet; const AOwns: Boolean;
|
||||
const ASerializationType: TMVCDatasetSerializationType); overload;
|
||||
procedure Render(const ADataSet: TDataSet; const AOwns: Boolean; const AIgnoredFields: TMVCIgnoredList;
|
||||
const ASerializationType: TMVCDatasetSerializationType); overload;
|
||||
procedure Render(const ADataSet: TDataSet; const AOwns: Boolean; const AIgnoredFields: TMVCIgnoredList;
|
||||
const ANameCase: TMVCNameCase; const ASerializationType: TMVCDatasetSerializationType); overload;
|
||||
procedure Render(const ATextWriter: TTextWriter; const AOwns: Boolean = True); overload;
|
||||
procedure Render(const AStream: TStream; const AOwns: Boolean = True); overload;
|
||||
procedure Render(const AErrorCode: Integer; const AErrorMessage: string; const AErrorClassName: string = '';
|
||||
@ -477,6 +491,33 @@ type
|
||||
procedure Render(const AException: Exception; AExceptionItems: TList<string> = nil;
|
||||
const AOwns: Boolean = True); overload;
|
||||
procedure Render(const AResponse: TMVCResponse; const AOwns: Boolean = True); overload;
|
||||
//Dataset support
|
||||
procedure Render(
|
||||
const ADataSet: TDataSet;
|
||||
const ASerializationAction: TMVCDatasetSerializationAction = nil
|
||||
); overload;
|
||||
procedure Render(
|
||||
const ADataSet: TDataSet;
|
||||
const AOwns: Boolean;
|
||||
const ASerializationAction: TMVCDatasetSerializationAction = nil); overload;
|
||||
procedure Render(
|
||||
const ADataSet: TDataSet;
|
||||
const AOwns: Boolean;
|
||||
const ASerializationType: TMVCDatasetSerializationType;
|
||||
const ASerializationAction: TMVCDatasetSerializationAction = nil); overload;
|
||||
procedure Render(
|
||||
const ADataSet: TDataSet;
|
||||
const AOwns: Boolean;
|
||||
const AIgnoredFields: TMVCIgnoredList;
|
||||
const ASerializationType: TMVCDatasetSerializationType;
|
||||
const ASerializationAction: TMVCDatasetSerializationAction = nil); overload;
|
||||
procedure Render(
|
||||
const ADataSet: TDataSet;
|
||||
const AOwns: Boolean;
|
||||
const AIgnoredFields: TMVCIgnoredList;
|
||||
const ANameCase: TMVCNameCase;
|
||||
const ASerializationType: TMVCDatasetSerializationType;
|
||||
const ASerializationAction: TMVCDatasetSerializationAction = nil); overload;
|
||||
// SSE Support
|
||||
procedure RenderSSE(const EventID: string; const EventData: string; EventName: string = '';
|
||||
const Retry: Integer = TMVCConstants.SSE_RETRY_DEFAULT);
|
||||
@ -1609,6 +1650,7 @@ begin
|
||||
Config[TMVCConfigKey.IndexDocument] := 'index.html';
|
||||
Config[TMVCConfigKey.MaxEntitiesRecordCount] := '20';
|
||||
Config[TMVCConfigKey.MaxRequestSize] := IntToStr(TMVCConstants.DEFAULT_MAX_REQUEST_SIZE);
|
||||
Config[TMVCConfigKey.HATEOSPropertyName] := '_links';
|
||||
|
||||
FMediaTypes.Add('.html', TMVCMediaType.TEXT_HTML);
|
||||
FMediaTypes.Add('.htm', TMVCMediaType.TEXT_HTML);
|
||||
@ -2570,9 +2612,9 @@ begin
|
||||
GetContext.Response.RawWebResponse.SendRedirect(AUrl);
|
||||
end;
|
||||
|
||||
procedure TMVCRenderer.Render(const AObject: TObject; const AOwns: Boolean);
|
||||
procedure TMVCRenderer.Render(const AObject: TObject; const AOwns: Boolean; const ASerializationAction: TMVCSerializationAction = nil);
|
||||
begin
|
||||
Render(AObject, AOwns, stDefault);
|
||||
Render(AObject, AOwns, stDefault, ASerializationAction);
|
||||
end;
|
||||
|
||||
procedure TMVCRenderer.Render(const AContent: string);
|
||||
@ -2602,9 +2644,10 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TMVCRenderer.Render<T>(const ACollection: TObjectList<T>; const AOwns: Boolean);
|
||||
procedure TMVCRenderer.Render<T>(const ACollection: TObjectList<T>; const AOwns: Boolean;
|
||||
const ASerializationAction: TMVCSerializationAction<T>);
|
||||
begin
|
||||
Self.Render<T>(ACollection, AOwns, stDefault);
|
||||
Self.Render<T>(ACollection, AOwns, stDefault, ASerializationAction);
|
||||
end;
|
||||
|
||||
procedure TMVCRenderer.ResponseStatus(const AStatusCode: Integer; const AReasonString: string);
|
||||
@ -2695,10 +2738,10 @@ begin
|
||||
GetViewDataSets.Add(aDataSetName, Value);
|
||||
end;
|
||||
|
||||
procedure TMVCRenderer.Render(const AObject: TObject; const AOwns: Boolean; const AType: TMVCSerializationType);
|
||||
procedure TMVCRenderer.Render(const AObject: TObject; const AOwns: Boolean; const AType: TMVCSerializationType; const ASerializationAction: TMVCSerializationAction = nil);
|
||||
begin
|
||||
try
|
||||
Render(Serializer(GetContentType).SerializeObject(AObject, AType));
|
||||
Render(Serializer(GetContentType).SerializeObject(AObject, AType, [], ASerializationAction));
|
||||
finally
|
||||
if AOwns then
|
||||
AObject.Free;
|
||||
@ -2733,15 +2776,15 @@ begin
|
||||
end;
|
||||
|
||||
procedure TMVCRenderer.Render(const ADataSet: TDataSet; const AOwns: Boolean; const AIgnoredFields: TMVCIgnoredList;
|
||||
const ANameCase: TMVCNameCase; const ASerializationType: TMVCDatasetSerializationType);
|
||||
const ANameCase: TMVCNameCase; const ASerializationType: TMVCDatasetSerializationType; const ASerializationAction: TMVCDatasetSerializationAction);
|
||||
begin
|
||||
if Assigned(ADataSet) then
|
||||
begin
|
||||
try
|
||||
if ASerializationType = dstSingleRecord then
|
||||
Render(Serializer(GetContentType).SerializeDataSetRecord(ADataSet, AIgnoredFields, ANameCase))
|
||||
Render(Serializer(GetContentType).SerializeDataSetRecord(ADataSet, AIgnoredFields, ANameCase, ASerializationAction))
|
||||
else
|
||||
Render(Serializer(GetContentType).SerializeDataSet(ADataSet, AIgnoredFields, ANameCase))
|
||||
Render(Serializer(GetContentType).SerializeDataSet(ADataSet, AIgnoredFields, ANameCase, ASerializationAction))
|
||||
finally
|
||||
if AOwns then
|
||||
ADataSet.Free;
|
||||
@ -2752,12 +2795,25 @@ begin
|
||||
end;
|
||||
|
||||
procedure TMVCRenderer.Render<T>(const ACollection: TObjectList<T>; const AOwns: Boolean;
|
||||
const AType: TMVCSerializationType);
|
||||
const AType: TMVCSerializationType; const ASerializationAction: TMVCSerializationAction<T>);
|
||||
var
|
||||
lSerializationAction: TMVCSerializationAction;
|
||||
begin
|
||||
if Assigned(ACollection) then
|
||||
begin
|
||||
try
|
||||
Render(Serializer(GetContentType).SerializeCollection(ACollection, AType));
|
||||
if Assigned(ASerializationAction) then
|
||||
begin
|
||||
lSerializationAction := procedure(const AObject: TObject; const Dict: TMVCStringDictionary)
|
||||
begin
|
||||
ASerializationAction(T(AObject), Dict);
|
||||
end;
|
||||
end
|
||||
else
|
||||
begin
|
||||
lSerializationAction := nil;
|
||||
end;
|
||||
Render(Serializer(GetContentType).SerializeCollection(ACollection, AType, [], lSerializationAction));
|
||||
finally
|
||||
if AOwns then
|
||||
ACollection.Free;
|
||||
@ -2791,9 +2847,10 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TMVCRenderer.Render<T>(const ACollection: TObjectList<T>);
|
||||
procedure TMVCRenderer.Render<T>(const ACollection: TObjectList<T>;
|
||||
const ASerializationAction: TMVCSerializationAction<T>);
|
||||
begin
|
||||
Self.Render<T>(ACollection, True);
|
||||
Self.Render<T>(ACollection, True, ASerializationAction);
|
||||
end;
|
||||
|
||||
procedure TMVCRenderer.RenderResponseStream;
|
||||
@ -2943,31 +3000,38 @@ begin
|
||||
raise EMVCException.Create('Cannot render an empty response object.');
|
||||
end;
|
||||
|
||||
procedure TMVCRenderer.Render(const ADataSet: TDataSet);
|
||||
procedure TMVCRenderer.Render(const ADataSet: TDataSet; const ASerializationAction: TMVCDatasetSerializationAction);
|
||||
begin
|
||||
Render(ADataSet, True);
|
||||
Render(ADataSet, True, ASerializationAction);
|
||||
end;
|
||||
|
||||
procedure TMVCRenderer.Render(const ADataSet: TDataSet; const AOwns: Boolean);
|
||||
procedure TMVCRenderer.Render(const ADataSet: TDataSet; const AOwns: Boolean; const ASerializationAction: TMVCDatasetSerializationAction);
|
||||
begin
|
||||
Render(ADataSet, AOwns, dstAllRecords);
|
||||
Render(ADataSet, AOwns, dstAllRecords, ASerializationAction);
|
||||
end;
|
||||
|
||||
procedure TMVCRenderer.Render(const AObject: TObject);
|
||||
procedure TMVCRenderer.Render(const AObject: TObject; const ASerializationAction: TMVCSerializationAction = nil);
|
||||
begin
|
||||
Render(AObject, True);
|
||||
Render(AObject, True, ASerializationAction);
|
||||
end;
|
||||
|
||||
procedure TMVCRenderer.Render(const ADataSet: TDataSet; const AOwns: Boolean; const AIgnoredFields: TMVCIgnoredList;
|
||||
const ASerializationType: TMVCDatasetSerializationType);
|
||||
procedure TMVCRenderer.Render(
|
||||
const ADataSet: TDataSet;
|
||||
const AOwns: Boolean;
|
||||
const AIgnoredFields: TMVCIgnoredList;
|
||||
const ASerializationType: TMVCDatasetSerializationType;
|
||||
const ASerializationAction: TMVCDatasetSerializationAction);
|
||||
begin
|
||||
Render(ADataSet, AOwns, AIgnoredFields, ncLowerCase, ASerializationType);
|
||||
Render(ADataSet, AOwns, AIgnoredFields, ncLowerCase, ASerializationType, ASerializationAction);
|
||||
end;
|
||||
|
||||
procedure TMVCRenderer.Render(const ADataSet: TDataSet; const AOwns: Boolean;
|
||||
const ASerializationType: TMVCDatasetSerializationType);
|
||||
procedure TMVCRenderer.Render(
|
||||
const ADataSet: TDataSet;
|
||||
const AOwns: Boolean;
|
||||
const ASerializationType: TMVCDatasetSerializationType;
|
||||
const ASerializationAction: TMVCDatasetSerializationAction);
|
||||
begin
|
||||
Render(ADataSet, AOwns, [], ASerializationType);
|
||||
Render(ADataSet, AOwns, [], ASerializationType, ASerializationAction);
|
||||
end;
|
||||
|
||||
constructor TMVCResponse.Create;
|
||||
|
@ -1,2 +1,2 @@
|
||||
const
|
||||
DMVCFRAMEWORK_VERSION = '3.1.1 (beryllium) RC2';
|
||||
DMVCFRAMEWORK_VERSION = '3.1.1 (beryllium) RC3';
|
1
tasks.py
1
tasks.py
@ -108,6 +108,7 @@ def copy_sources():
|
||||
]
|
||||
|
||||
folders = [
|
||||
"d100",
|
||||
"d101",
|
||||
"d102",
|
||||
"d103"
|
||||
|
@ -7,13 +7,13 @@ program DMVCFrameworkTests;
|
||||
|
||||
uses
|
||||
System.SysUtils,
|
||||
{$IFDEF GUI_TESTRUNNER}
|
||||
{$IFDEF GUI_TESTRUNNER}
|
||||
Vcl.Forms,
|
||||
DUnitX.Loggers.GUI.Vcl,
|
||||
{$ENDIF}
|
||||
{$IFDEF CONSOLE_TESTRUNNER}
|
||||
{$ENDIF }
|
||||
{$IFDEF CONSOLE_TESTRUNNER}
|
||||
DUnitX.Loggers.Console,
|
||||
{$ENDIF}
|
||||
{$ENDIF }
|
||||
DUnitX.Loggers.Xml.NUnit,
|
||||
DUnitX.TestFramework,
|
||||
FrameworkTestsU in 'FrameworkTestsU.pas',
|
||||
@ -22,10 +22,9 @@ uses
|
||||
BOs in 'BOs.pas',
|
||||
TestServerControllerU in '..\TestServer\TestServerControllerU.pas',
|
||||
RESTAdapterTestsU in 'RESTAdapterTestsU.pas',
|
||||
MVCFramework.Tests.WebModule2
|
||||
in '..\StandaloneServer\MVCFramework.Tests.WebModule2.pas' {TestWebModule2: TWebModule} ,
|
||||
MVCFramework.Tests.WebModule2 in '..\StandaloneServer\MVCFramework.Tests.WebModule2.pas' {TestWebModule2: TWebModule},
|
||||
MVCFramework.Tests.StandaloneServer in '..\StandaloneServer\MVCFramework.Tests.StandaloneServer.pas',
|
||||
MVCFramework.Tests.WebModule1 in '..\RESTClient\MVCFramework.Tests.WebModule1.pas' {TestWebModule1: TWebModule} ,
|
||||
MVCFramework.Tests.WebModule1 in '..\RESTClient\MVCFramework.Tests.WebModule1.pas' {TestWebModule1: TWebModule},
|
||||
MVCFramework.Tests.RESTClient in '..\RESTClient\MVCFramework.Tests.RESTClient.pas',
|
||||
MVCFramework.Tests.AppController in '..\RESTClient\MVCFramework.Tests.AppController.pas',
|
||||
BusinessObjectsU in '..\..\..\samples\commons\BusinessObjectsU.pas',
|
||||
@ -35,7 +34,8 @@ uses
|
||||
JSONRPCTestsU in 'JSONRPCTestsU.pas',
|
||||
MVCFramework.JSONRPC in '..\..\..\sources\MVCFramework.JSONRPC.pas',
|
||||
RandomUtilsU in '..\..\..\samples\commons\RandomUtilsU.pas',
|
||||
MVCFramework.Serializer.JsonDataObjects in '..\..\..\sources\MVCFramework.Serializer.JsonDataObjects.pas';
|
||||
MVCFramework.Serializer.JsonDataObjects in '..\..\..\sources\MVCFramework.Serializer.JsonDataObjects.pas',
|
||||
JsonDataObjects in '..\..\..\sources\JsonDataObjects.pas';
|
||||
|
||||
{$R *.RES}
|
||||
{$IFDEF CONSOLE_TESTRUNNER}
|
||||
|
@ -144,7 +144,6 @@
|
||||
<DCC_Define>_CONSOLE_TESTRUNNER;GUI_TESTRUNNER;$(DCC_Define)</DCC_Define>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Cfg_3_Win32)'!=''">
|
||||
<DCC_Define>GUI_TESTRUNNER;$(DCC_Define)</DCC_Define>
|
||||
<VerInfo_Locale>1033</VerInfo_Locale>
|
||||
<AppEnableRuntimeThemes>true</AppEnableRuntimeThemes>
|
||||
</PropertyGroup>
|
||||
@ -188,9 +187,10 @@
|
||||
<DCCReference Include="..\..\..\sources\MVCFramework.JSONRPC.pas"/>
|
||||
<DCCReference Include="..\..\..\samples\commons\RandomUtilsU.pas"/>
|
||||
<DCCReference Include="..\..\..\sources\MVCFramework.Serializer.JsonDataObjects.pas"/>
|
||||
<BuildConfiguration Include="CI">
|
||||
<Key>Cfg_5</Key>
|
||||
<CfgParent>Cfg_4</CfgParent>
|
||||
<DCCReference Include="..\..\..\sources\JsonDataObjects.pas"/>
|
||||
<BuildConfiguration Include="Release">
|
||||
<Key>Cfg_2</Key>
|
||||
<CfgParent>Base</CfgParent>
|
||||
</BuildConfiguration>
|
||||
<BuildConfiguration Include="Base">
|
||||
<Key>Base</Key>
|
||||
@ -199,9 +199,9 @@
|
||||
<Key>Cfg_4</Key>
|
||||
<CfgParent>Cfg_1</CfgParent>
|
||||
</BuildConfiguration>
|
||||
<BuildConfiguration Include="Release">
|
||||
<Key>Cfg_2</Key>
|
||||
<CfgParent>Base</CfgParent>
|
||||
<BuildConfiguration Include="CI">
|
||||
<Key>Cfg_5</Key>
|
||||
<CfgParent>Cfg_4</CfgParent>
|
||||
</BuildConfiguration>
|
||||
<BuildConfiguration Include="Debug">
|
||||
<Key>Cfg_1</Key>
|
||||
@ -294,12 +294,24 @@
|
||||
<Overwrite>true</Overwrite>
|
||||
</Platform>
|
||||
</DeployFile>
|
||||
<DeployFile LocalName="Win32\GUI\DMVCFrameworkTests.exe" Configuration="GUI" Class="ProjectOutput">
|
||||
<Platform Name="Win32">
|
||||
<RemoteName>DMVCFrameworkTests.exe</RemoteName>
|
||||
<Overwrite>true</Overwrite>
|
||||
</Platform>
|
||||
</DeployFile>
|
||||
<DeployFile LocalName="Win32\Debug\DMVCFrameworkTests.rsm" Configuration="Debug" Class="DebugSymbols">
|
||||
<Platform Name="Win32">
|
||||
<RemoteName>DMVCFrameworkTests.rsm</RemoteName>
|
||||
<Overwrite>true</Overwrite>
|
||||
</Platform>
|
||||
</DeployFile>
|
||||
<DeployFile LocalName="Win32\GUI\DMVCFrameworkTests.rsm" Configuration="GUI" Class="DebugSymbols">
|
||||
<Platform Name="Win32">
|
||||
<RemoteName>DMVCFrameworkTests.rsm</RemoteName>
|
||||
<Overwrite>true</Overwrite>
|
||||
</Platform>
|
||||
</DeployFile>
|
||||
<DeployClass Name="AdditionalDebugSymbols">
|
||||
<Platform Name="OSX32">
|
||||
<Operation>1</Operation>
|
||||
|
@ -106,6 +106,8 @@ type
|
||||
[Test]
|
||||
procedure TestRenderWrappedList;
|
||||
[Test]
|
||||
procedure TestRenderActionInCollections;
|
||||
[Test]
|
||||
procedure TestRenderWrappedListWithCompression;
|
||||
[Test]
|
||||
procedure TestRenderStreamAndFreeWithOwnerFalse;
|
||||
@ -685,6 +687,26 @@ begin
|
||||
}
|
||||
end;
|
||||
|
||||
procedure TServerTest.TestRenderActionInCollections;
|
||||
var
|
||||
lRes: IRESTResponse;
|
||||
lJArr: TJDOJsonArray;
|
||||
I: Integer;
|
||||
begin
|
||||
lRes := RESTClient.doGET('/people/renderaction', []);
|
||||
lJArr := TJsonBaseObject.Parse(lRes.BodyAsString) as TJDOJsonArray;
|
||||
try
|
||||
for I := 0 to lJArr.Count - 1 do
|
||||
begin
|
||||
Assert.isFalse(lJArr[I].O[TMVCConstants.HATEOS_PROP_NAME].IsNull, '_links doesn''t exists');
|
||||
Assert.isFalse(lJArr[I].O[TMVCConstants.HATEOS_PROP_NAME]['x-ref-lastname'].IsNull, '_links.x-ref-lastname doesn''t exists');
|
||||
Assert.isFalse(lJArr[I].O[TMVCConstants.HATEOS_PROP_NAME]['x-ref-firstname'].IsNull, '_links.x-ref-firstname doesn''t exists');
|
||||
end;
|
||||
finally
|
||||
lJArr.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TServerTest.TestRenderStreamAndFreeWithOwnerFalse;
|
||||
var
|
||||
lRes: IRESTResponse;
|
||||
@ -726,7 +748,7 @@ end;
|
||||
procedure TServerTest.TestRenderWrappedListWithCompression;
|
||||
var
|
||||
lRes: IRESTResponse;
|
||||
lJSONArr: TJDOJSONArray;
|
||||
lJSONArr: TJDOJsonArray;
|
||||
I: Integer;
|
||||
lCompType: string;
|
||||
j: Integer;
|
||||
@ -1377,7 +1399,7 @@ procedure TJSONRPCServerTest.TestRequestWithParams_I_I_ret_A;
|
||||
var
|
||||
lReq: IJSONRPCRequest;
|
||||
lRPCResp: IJSONRPCResponse;
|
||||
lArr: TJDOJSONArray;
|
||||
lArr: TJDOJsonArray;
|
||||
I: Integer;
|
||||
x: Integer;
|
||||
begin
|
||||
@ -1388,7 +1410,7 @@ begin
|
||||
lReq.RequestID := 1234;
|
||||
|
||||
lRPCResp := FExecutor.ExecuteRequest(lReq);
|
||||
lArr := TJDOJSONArray(lRPCResp.Result.AsObject);
|
||||
lArr := TJDOJsonArray(lRPCResp.Result.AsObject);
|
||||
x := 1;
|
||||
for I := 0 to lArr.Count - 1 do
|
||||
begin
|
||||
@ -1397,7 +1419,7 @@ begin
|
||||
end;
|
||||
|
||||
lRPCResp := FExecutor2.ExecuteRequest(lReq);
|
||||
lArr := TJDOJSONArray(lRPCResp.Result.AsObject);
|
||||
lArr := TJDOJsonArray(lRPCResp.Result.AsObject);
|
||||
x := 1;
|
||||
for I := 0 to lArr.Count - 1 do
|
||||
begin
|
||||
|
@ -103,6 +103,10 @@ type
|
||||
[MVCProduces('application/json', 'utf-8')]
|
||||
procedure TestConsumeJSON;
|
||||
|
||||
[MVCPath('/people/renderaction')]
|
||||
[MVCHTTPMethod([httpGET])]
|
||||
procedure TestGetPersonsHateos;
|
||||
|
||||
[MVCPath('/people/($id)')]
|
||||
[MVCHTTPMethod([httpGET])]
|
||||
procedure TestGetPersonByID;
|
||||
@ -434,6 +438,16 @@ begin
|
||||
|
||||
end;
|
||||
|
||||
procedure TTestServerController.TestGetPersonsHateos;
|
||||
begin
|
||||
Render<TPerson>(TPerson.GetList, True,
|
||||
procedure(const Person: TPerson; const Links: TMVCStringDictionary)
|
||||
begin
|
||||
Links['x-ref-firstname'] := '/api/people/' + Person.FirstName;
|
||||
Links['x-ref-lastname'] := '/api/people/' + Person.LastName;
|
||||
end);
|
||||
end;
|
||||
|
||||
procedure TTestServerController.TestGetWrappedPeople;
|
||||
var
|
||||
LWrappedList: IWrappedList;
|
||||
@ -525,7 +539,7 @@ begin
|
||||
end;
|
||||
|
||||
procedure TTestServerController.TestTypedActionAllTypes(ParString: string; ParInteger: Integer; ParInt64: Int64;
|
||||
ParSingle: Single; ParDouble: Double; ParExtended: Extended);
|
||||
ParSingle: Single; ParDouble: Double; ParExtended: Extended);
|
||||
var
|
||||
lJObj: TJSONObject;
|
||||
begin
|
||||
|
Loading…
Reference in New Issue
Block a user