NEW APACHE SAMPLE

This commit is contained in:
daniele.teti 2014-05-22 10:48:17 +00:00
parent 842dfd60cf
commit b53c4345c6
11 changed files with 716 additions and 0 deletions

View File

@ -0,0 +1,62 @@
object WineCellarDataModule: TWineCellarDataModule
OldCreateOrder = False
Height = 211
Width = 336
object Connection: TFDConnection
Params.Strings = (
'Database=C:\DEV\DMVCFramework\samples\winecellar\WINES.FDB'
'User_Name=sysdba'
'Password=masterkey'
'DriverID=FB')
ConnectedStoredUsage = [auDesignTime]
Connected = True
LoginPrompt = False
BeforeConnect = ConnectionBeforeConnect
Left = 72
Top = 48
end
object qryWines: TFDQuery
Active = True
Connection = Connection
UpdateObject = updWines
SQL.Strings = (
'SELECT * FROM WINE')
Left = 168
Top = 48
end
object updWines: TFDUpdateSQL
Connection = Connection
InsertSQL.Strings = (
'INSERT INTO WINE'
'(NAME, "YEAR", GRAPES, COUNTRY, REGION, '
' DESCRIPTION, PICTURE)'
'VALUES (:NEW_NAME, :NEW_YEAR, :NEW_GRAPES, :NEW_COUNTRY, :NEW_RE' +
'GION, '
' :NEW_DESCRIPTION, :NEW_PICTURE)')
ModifySQL.Strings = (
'UPDATE WINE'
'SET NAME = :NEW_NAME, "YEAR" = :NEW_YEAR, GRAPES = :NEW_GRAPES, '
' COUNTRY = :NEW_COUNTRY, REGION = :NEW_REGION, DESCRIPTION = :N' +
'EW_DESCRIPTION, '
' PICTURE = :NEW_PICTURE'
'WHERE ID = :OLD_ID')
DeleteSQL.Strings = (
'DELETE FROM WINE'
'WHERE ID = :OLD_ID')
FetchRowSQL.Strings = (
'SELECT ID, NAME, "YEAR" AS "YEAR", GRAPES, COUNTRY, REGION, DESC' +
'RIPTION, '
' PICTURE'
'FROM WINE'
'WHERE ID = :ID')
Left = 168
Top = 120
end
object FDPhysFBDriverLink1: TFDPhysFBDriverLink
Left = 72
Top = 120
end
end

View File

@ -0,0 +1,106 @@
unit MainDataModuleUnit;
interface
uses System.SysUtils,
System.Classes,
Data.DBXFirebird,
Data.DB,
Data.SqlExpr
{$IFDEF VER270}
, System.JSON
{$ELSE}
, Data.DBXJSON
{$ENDIF}
, 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.Comp.Client, FireDAC.Stan.Param,
FireDAC.DatS, FireDAC.DApt.Intf, FireDAC.DApt, FireDAC.Comp.DataSet, FireDAC.Phys.IBBase, FireDAC.Phys.FB;
type
TWineCellarDataModule = class(TDataModule)
Connection: TFDConnection;
qryWines: TFDQuery;
updWines: TFDUpdateSQL;
FDPhysFBDriverLink1: TFDPhysFBDriverLink;
procedure ConnectionBeforeConnect(Sender: TObject);
public
function GetWineById(id: Integer): TJSONObject;
function FindWines(Search: string): TJSONArray;
function AddWine(AWine: TJSONObject): TJSONObject;
function UpdateWine(Wine: TJSONObject): TJSONObject;
function DeleteWine(id: Integer): TJSONObject;
end;
implementation
{$R *.dfm}
uses System.StrUtils,
Data.DBXCommon,
ObjectsMappers,
WinesBO;
{ TCellarSM }
function TWineCellarDataModule.AddWine(AWine: TJSONObject): TJSONObject;
var
Wine: TWine;
begin
Wine := Mapper.JSONObjectToObject<TWine>(AWine);
try
Mapper.ObjectToFDParameters(
updWines.Commands[arInsert].Params,
Wine,
'NEW_');
updWines.Commands[arInsert].Execute;
finally
Wine.Free;
end;
end;
function TWineCellarDataModule.DeleteWine(id: Integer): TJSONObject;
begin
updWines.Commands[arDelete].ParamByName('OLD_ID').AsInteger := id;
updWines.Commands[arDelete].Execute;
end;
procedure TWineCellarDataModule.ConnectionBeforeConnect(Sender: TObject);
begin
Connection.Params.Values['Database'] :=
{ change this path to be compliant with your system }
'C:\DEV\DMVCFramework\samples\winecellar\WINES.FDB';
end;
function TWineCellarDataModule.FindWines(Search: string): TJSONArray;
begin
if Search.IsEmpty then
qryWines.Open('SELECT * FROM wine')
else
qryWines.Open('SELECT * FROM wine where NAME CONTAINING ?', [Search]);
Result := qryWines.AsJSONArray;
end;
function TWineCellarDataModule.GetWineById(id: Integer): TJSONObject;
begin
qryWines.Open('SELECT * FROM wine where id = ?', [id]);
Result := qryWines.AsJSONObject;
end;
function TWineCellarDataModule.UpdateWine(Wine: TJSONObject): TJSONObject;
var
w: TWine;
begin
w := Mapper.JSONObjectToObject<TWine>(Wine);
try
Mapper.ObjectToFDParameters(updWines.Commands[arUpdate].Params, w, 'NEW_');
updWines.Commands[arUpdate].Params.ParamByName('OLD_ID').AsInteger := w.id;
updWines.Commands[arUpdate].Execute;
finally
w.Free;
end;
Result := TJSONObject.Create;
end;
end.

View File

@ -0,0 +1,14 @@
object wm: Twm
OldCreateOrder = False
OnCreate = WebModuleCreate
OnDestroy = WebModuleDestroy
Actions = <
item
Default = True
Name = 'DefaultHandler'
PathInfo = '/'
OnAction = WebModule1DefaultHandlerAction
end>
Height = 230
Width = 415
end

View File

@ -0,0 +1,51 @@
unit MainWebModuleUnit;
interface
uses System.SysUtils, System.Classes, Web.HTTPApp, MVCFramework;
type
Twm = class(TWebModule)
procedure WebModule1DefaultHandlerAction(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
procedure WebModuleCreate(Sender: TObject);
procedure WebModuleDestroy(Sender: TObject);
private
MVCEngine: TMVCEngine;
public
{ Public declarations }
end;
var
WebModuleClass: TComponentClass = Twm;
implementation
uses
WineCellarAppControllerU;
{$R *.dfm}
procedure Twm.WebModule1DefaultHandlerAction(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
begin
Response.Content :=
'<html><heading/><body>Web Server Application</body></html>';
end;
procedure Twm.WebModuleCreate(Sender: TObject);
begin
MVCEngine := TMVCEngine.Create(self);
MVCEngine.AddController(TWineCellarApp);
MVCEngine.Config['document_root'] := '..\..\www';
end;
procedure Twm.WebModuleDestroy(Sender: TObject);
begin
MVCEngine.Free;
end;
end.

View File

@ -0,0 +1,12 @@
object WebModule1: TWebModule1
OldCreateOrder = False
Actions = <
item
Default = True
Name = 'DefaultHandler'
PathInfo = '/'
OnAction = WebModule1DefaultHandlerAction
end>
Height = 230
Width = 415
end

View File

@ -0,0 +1,88 @@
unit WebModuleUnit1;
interface
uses System.SysUtils, System.Classes, Web.HTTPApp, mvcframework;
type
TWebModule1 = class(TWebModule)
procedure WebModule1DefaultHandlerAction(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
private
Engine: TMVCEngine;
{ Private declarations }
public
{ Public declarations }
end;
var
WebModuleClass: TComponentClass = TWebModule1;
implementation
uses
Winapi.Windows, Web.ApacheHTTP;
{ %CLASSGROUP 'Vcl.Controls.TControl' }
{$R *.dfm}
function GetAllEnvVars(const Vars: TStrings): Integer;
var
PEnvVars: PChar; // pointer to start of environment block
PEnvEntry: PChar; // pointer to an env string in block
begin
// Clear the list
if Assigned(Vars) then
Vars.Clear;
// Get reference to environment block for this process
PEnvVars := GetEnvironmentStrings;
if PEnvVars <> nil then
begin
// We have a block: extract strings from it
// Env strings are #0 separated and list ends with #0#0
PEnvEntry := PEnvVars;
try
while PEnvEntry^ <> #0 do
begin
if Assigned(Vars) then
Vars.Add(PEnvEntry);
Inc(PEnvEntry, StrLen(PEnvEntry) + 1);
end;
// Calculate length of block
Result := (PEnvEntry - PEnvVars) + 1;
finally
// Dispose of the memory block
FreeEnvironmentStrings(PEnvVars);
end;
end
else
// No block => zero length
Result := 0;
end;
procedure TWebModule1.WebModule1DefaultHandlerAction(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
var
sl: TStringList;
begin
// TApacheRequest(Request).GetFieldByName()
// Response.ContentType := 'text/plain';
// // Response.Content := GetEnvironmentVariable('HTTP_USER_AGENT');
// sl := TStringList.Create;
// try
// GetAllEnvVars(sl);
// Response.Content := sl.Text;
// finally
// sl.Free;
// end;
Response.Content :=
'<html>' +
'<head><title>Web Server Application</title></head>' +
'<body><h1>APACHE Web Server Application</h1><h3>Proudly built with Delphi XE6</h3></body>' +
'</html>';
end;
end.

View File

@ -0,0 +1,112 @@
unit WineCellarAppControllerU;
interface
uses
MVCFramework,
MainDataModuleUnit;
type
[MVCPath('/')]
TWineCellarApp = class(TMVCController)
private
dm: TWineCellarDataModule;
protected
procedure OnBeforeAction(Context: TWebContext; const AActionNAme: string;
var Handled: Boolean);
override;
procedure OnAfterAction(Context: TWebContext;
const AActionNAme: string); override;
public
[MVCPath('/')]
[MVCHTTPMethod([httpGET])]
procedure Index(ctx: TWebContext);
[MVCPath('/wines')]
[MVCHTTPMethod([httpGET])]
procedure WinesList(ctx: TWebContext);
[MVCPath('/wines')]
[MVCHTTPMethod([httpPOST])]
procedure SaveWine(ctx: TWebContext);
[MVCPath('/wines/search/($value)')]
procedure FindWines(ctx: TWebContext);
[MVCPath('/wines/($id)')]
[MVCHTTPMethod([httpGET, httpDELETE])]
procedure WineById(ctx: TWebContext);
[MVCPath('/wines/($id)')]
[MVCHTTPMethod([httpPUT])]
procedure UpdateWineById(ctx: TWebContext);
end;
implementation
uses
System.SysUtils;
procedure TWineCellarApp.FindWines(ctx: TWebContext);
begin
Render(dm.FindWines(ctx.Request.Params['value']));
end;
procedure TWineCellarApp.Index(ctx: TWebContext);
begin
Redirect('/index.html');
end;
procedure TWineCellarApp.OnAfterAction(Context: TWebContext;
const AActionNAme: string);
begin
inherited;
dm.Free;
end;
procedure TWineCellarApp.OnBeforeAction(Context: TWebContext;
const AActionNAme: string;
var Handled: Boolean);
begin
inherited;
dm := TWineCellarDataModule.Create(nil);
end;
procedure TWineCellarApp.SaveWine(ctx: TWebContext);
begin
dm.AddWine(ctx.Request.BodyAsJSONObject);
end;
procedure TWineCellarApp.UpdateWineById(ctx: TWebContext);
begin
Render(dm.UpdateWine(ctx.Request.BodyAsJSONObject));
end;
procedure TWineCellarApp.WineById(ctx: TWebContext);
begin
// different behaviour according to the request http method
case ctx.Request.HTTPMethod of
httpDELETE:
begin
dm.DeleteWine(StrToInt(ctx.Request.Params['id']));
Render(200, 'Wine deleted');
end;
httpGET:
begin
Render(dm.GetWineById(StrToInt(ctx.Request.Params['id'])));
end
else
raise Exception.Create('Invalid http method for action');
end;
end;
procedure TWineCellarApp.WinesList(ctx: TWebContext);
begin
Render(dm.FindWines(''));
end;
end.

View File

@ -0,0 +1,83 @@
unit WinesBO;
interface
uses ObjectsMappers;
type
[MapperJSONNaming(JSONNameLowerCase)]
TWine = class
private
FYEAR: string;
FNAME: string;
FPICTURE: String;
FGRAPES: string;
FID: integer;
FDESCRIPTION: string;
FCOUNTRY: string;
FREGION: string;
procedure SetCOUNTRY(const Value: string);
procedure SetDESCRIPTION(const Value: string);
procedure SetGRAPES(const Value: string);
procedure SetID(const Value: integer);
procedure SetNAME(const Value: string);
procedure SetPICTURE(const Value: String);
procedure SetREGION(const Value: string);
procedure SetYEAR(const Value: string);
public
property id: integer read FID write SetID;
property name: string read FNAME write SetNAME;
property year: string read FYEAR write SetYEAR;
property grapes: string read FGRAPES write SetGRAPES;
property country: string read FCOUNTRY write SetCOUNTRY;
property region: string read FREGION write SetREGION;
property description: string read FDESCRIPTION write SetDESCRIPTION;
property picture: String read FPICTURE write SetPICTURE;
end;
implementation
{ TWine }
procedure TWine.SetCOUNTRY(const Value: string);
begin
FCOUNTRY := Value;
end;
procedure TWine.SetDESCRIPTION(const Value: string);
begin
FDESCRIPTION := Value;
end;
procedure TWine.SetGRAPES(const Value: string);
begin
FGRAPES := Value;
end;
procedure TWine.SetID(const Value: integer);
begin
FID := Value;
end;
procedure TWine.SetNAME(const Value: string);
begin
FNAME := Value;
end;
procedure TWine.SetPICTURE(const Value: String);
begin
FPICTURE := Value;
end;
procedure TWine.SetREGION(const Value: string);
begin
FREGION := Value;
end;
procedure TWine.SetYEAR(const Value: string);
begin
FYEAR := Value;
end;
end.

View File

@ -0,0 +1,46 @@
library mod_dmvc;
uses
Winapi.ActiveX,
System.Win.ComObj,
Web.WebBroker,
Web.ApacheApp,
Web.HTTPD24Impl,
MainDataModuleUnit in 'MainDataModuleUnit.pas' {WineCellarDataModule: TDataModule},
MainWebModuleUnit in 'MainWebModuleUnit.pas' {wm: TWebModule},
WineCellarAppControllerU in 'WineCellarAppControllerU.pas',
WinesBO in 'WinesBO.pas';
{$R *.res}
// httpd.conf entries:
//
(*
LoadModule dmvc_module modules/mod_dmvc.dll
<Location /xyz>
SetHandler mod_dmvc-handler
</Location>
*)
//
// These entries assume that the output directory for this project is the apache/modules directory.
//
// httpd.conf entries should be different if the project is changed in these ways:
// 1. The TApacheModuleData variable name is changed
// 2. The project is renamed.
// 3. The output directory is not the apache/modules directory
//
// Declare exported variable so that Apache can access this module.
var
GModuleData: TApacheModuleData;
exports
GModuleData name 'dmvc_module';
begin
CoInitFlags := COINIT_MULTITHREADED;
Web.ApacheApp.InitApplication(@GModuleData);
Application.Initialize;
Application.WebModuleClass := WebModuleClass;
Application.Run;
end.

View File

@ -0,0 +1,142 @@
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ProjectGuid>{61ADE231-72F2-4E11-8EDD-62C5AFEF0463}</ProjectGuid>
<ProjectVersion>15.4</ProjectVersion>
<FrameworkType>VCL</FrameworkType>
<MainSource>mod_dmvc.dpr</MainSource>
<Base>True</Base>
<Config Condition="'$(Config)'==''">Debug</Config>
<Platform Condition="'$(Platform)'==''">Win32</Platform>
<TargetedPlatforms>1</TargetedPlatforms>
<AppType>Library</AppType>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''">
<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="'$(Base)'!=''">
<Icns_MainIcns>$(BDS)\bin\delphi_PROJECTICNS.icns</Icns_MainIcns>
<DCC_Namespace>System;Xml;Data;Datasnap;Web;Soap;Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;$(DCC_Namespace)</DCC_Namespace>
<SanitizedProjectName>mod_dmvc</SanitizedProjectName>
<GenDll>true</GenDll>
<Icon_MainIcon>$(BDS)\bin\delphi_PROJECTICON.ico</Icon_MainIcon>
<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>
</PropertyGroup>
<PropertyGroup Condition="'$(Base_Win32)'!=''">
<VerInfo_Locale>1033</VerInfo_Locale>
<DCC_Namespace>Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)</DCC_Namespace>
<DCC_UsePackage>FireDACSqliteDriver;FireDACDSDriver;DBXSqliteDriver;SampleListViewMultiDetailAppearancePackage;FireDACPgDriver;fmx;IndySystem;TeeDB;tethering;ITDevCon2012AdapterPackage;inetdbbde;vclib;DBXInterBaseDriver;DataSnapClient;DataSnapServer;DataSnapCommon;DataSnapProviderClient;DBXSybaseASEDriver;DbxCommonDriver;vclimg;dbxcds;DatasnapConnectorsFreePascal;MetropolisUILiveTile;vcldb;vcldsnap;fmxFireDAC;DBXDb2Driver;DBXOracleDriver;CustomIPTransport;vclribbon;dsnap;IndyIPServer;fmxase;vcl;IndyCore;DBXMSSQLDriver;IndyIPCommon;CloudService;FmxTeeUI;FireDACIBDriver;CodeSiteExpressPkg;DataSnapFireDAC;FireDACDBXDriver;soapserver;inetdbxpress;dsnapxml;FireDACInfxDriver;FireDACDb2Driver;adortl;CustomAdaptersMDPackage;FireDACASADriver;bindcompfmx;vcldbx;FireDACODBCDriver;RESTBackendComponents;rtl;dbrtl;DbxClientDriver;FireDACCommon;bindcomp;inetdb;SampleListViewRatingsAppearancePackage;Tee;DBXOdbcDriver;vclFireDAC;xmlrtl;DataSnapNativeClient;svnui;ibxpress;IndyProtocols;DBXMySQLDriver;FireDACCommonDriver;bindcompdbx;bindengine;vclactnband;soaprtl;FMXTee;TeeUI;bindcompvcl;vclie;FireDACADSDriver;vcltouch;VclSmp;FireDACMSSQLDriver;FireDAC;DBXInformixDriver;Intraweb;VCLRESTComponents;DataSnapConnectors;DataSnapServerMidas;dsnapcon;DBXFirebirdDriver;SampleGenerator1Package;inet;fmxobj;FireDACMySQLDriver;soapmidas;vclx;svn;DBXSybaseASADriver;FireDACOracleDriver;fmxdae;RESTComponents;bdertl;FireDACMSAccDriver;dbexpress;DataSnapIndy10ServerTransport;IndyIPClient;$(DCC_UsePackage)</DCC_UsePackage>
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
<VerInfo_Keys>CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=</VerInfo_Keys>
</PropertyGroup>
<PropertyGroup Condition="'$(Base_Win64)'!=''">
<DCC_UsePackage>FireDACSqliteDriver;FireDACDSDriver;DBXSqliteDriver;FireDACPgDriver;fmx;IndySystem;TeeDB;tethering;vclib;DBXInterBaseDriver;DataSnapClient;DataSnapServer;DataSnapCommon;DataSnapProviderClient;DBXSybaseASEDriver;DbxCommonDriver;vclimg;dbxcds;DatasnapConnectorsFreePascal;MetropolisUILiveTile;vcldb;vcldsnap;fmxFireDAC;DBXDb2Driver;DBXOracleDriver;CustomIPTransport;vclribbon;dsnap;IndyIPServer;fmxase;vcl;IndyCore;DBXMSSQLDriver;IndyIPCommon;CloudService;FmxTeeUI;FireDACIBDriver;DataSnapFireDAC;FireDACDBXDriver;soapserver;inetdbxpress;dsnapxml;FireDACInfxDriver;FireDACDb2Driver;adortl;FireDACASADriver;bindcompfmx;FireDACODBCDriver;RESTBackendComponents;rtl;dbrtl;DbxClientDriver;FireDACCommon;bindcomp;inetdb;Tee;DBXOdbcDriver;vclFireDAC;xmlrtl;DataSnapNativeClient;ibxpress;IndyProtocols;DBXMySQLDriver;FireDACCommonDriver;bindcompdbx;bindengine;vclactnband;soaprtl;FMXTee;TeeUI;bindcompvcl;vclie;FireDACADSDriver;vcltouch;VclSmp;FireDACMSSQLDriver;FireDAC;DBXInformixDriver;Intraweb;VCLRESTComponents;DataSnapConnectors;DataSnapServerMidas;dsnapcon;DBXFirebirdDriver;inet;fmxobj;FireDACMySQLDriver;soapmidas;vclx;DBXSybaseASADriver;FireDACOracleDriver;fmxdae;RESTComponents;FireDACMSAccDriver;dbexpress;DataSnapIndy10ServerTransport;IndyIPClient;$(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)'!=''">
<Debugger_RunParams>-X</Debugger_RunParams>
<Debugger_HostApplication>C:\Tools\Apache24\bin\httpd.exe</Debugger_HostApplication>
<Manifest_File>None</Manifest_File>
<VerInfo_Locale>1033</VerInfo_Locale>
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
<DCC_ExeOutput>C:\Tools\Apache24\modules</DCC_ExeOutput>
<DCC_RemoteDebug>false</DCC_RemoteDebug>
</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="MainDataModuleUnit.pas">
<Form>WineCellarDataModule</Form>
<FormType>dfm</FormType>
<DesignClass>TDataModule</DesignClass>
</DCCReference>
<DCCReference Include="MainWebModuleUnit.pas">
<Form>wm</Form>
<FormType>dfm</FormType>
<DesignClass>TWebModule</DesignClass>
</DCCReference>
<DCCReference Include="WineCellarAppControllerU.pas"/>
<DCCReference Include="WinesBO.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/>
<BorlandProject>
<Delphi.Personality>
<Excluded_Packages>
<Excluded_Packages Name="$(BDSBIN)\bcboffice2k200.bpl">Embarcadero C++Builder Office 2000 Servers Package</Excluded_Packages>
<Excluded_Packages Name="$(BDSBIN)\bcbofficexp200.bpl">Embarcadero C++Builder Office XP Servers Package</Excluded_Packages>
<Excluded_Packages Name="$(BDSBIN)\dcloffice2k200.bpl">Microsoft Office 2000 Sample Automation Server Wrapper Components</Excluded_Packages>
<Excluded_Packages Name="$(BDSBIN)\dclofficexp200.bpl">Microsoft Office XP Sample Automation Server Wrapper Components</Excluded_Packages>
</Excluded_Packages>
<Source>
<Source Name="MainSource">mod_dmvc.dpr</Source>
</Source>
</Delphi.Personality>
<Deployment/>
<Platforms>
<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')"/>
</Project>

Binary file not shown.