%%----------------------------------------------------------------------
%%
%% %CopyrightBegin%
%%
%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
%% You may obtain a copy of the License at
%%
%% http://www.apache.org/licenses/LICENSE-2.0
%%
%% Unless required by applicable law or agreed to in writing, software
%% distributed under the License is distributed on an "AS IS" BASIS,
%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
%% See the License for the specific language governing permissions and
%% limitations under the License.
%%
%% %CopyrightEnd%
%%
%%
%%----------------------------------------------------------------------
%% File : CosFileTransfer_Directory_impl
%% Description :
%%
%% Created : 12 Sept 2000
%%----------------------------------------------------------------------
-module('CosFileTransfer_Directory_impl').
%%----------------------------------------------------------------------
%% Include files
%%----------------------------------------------------------------------
-include_lib("orber/include/corba.hrl").
-include_lib("orber/src/orber_iiop.hrl").
-include_lib("cosProperty/include/CosPropertyService.hrl").
-include("cosFileTransferApp.hrl").
%%----------------------------------------------------------------------
%% External exports
%%----------------------------------------------------------------------
-export([init/1,
terminate/2]).
%% Interface functions
-export([list/3]).
%% Inherited CosFileTransfer::File
-export(['_get_name'/2,
'_get_complete_file_name'/2,
'_get_parent'/2,
'_get_associated_session'/2]).
%% Inherited CosPropertyService::PropertySetDef
-export([get_allowed_property_types/2,
get_allowed_properties/2,
define_property_with_mode/5,
define_properties_with_modes/3,
get_property_mode/3,
get_property_modes/3,
set_property_mode/4,
set_property_modes/3]).
%% Inherited CosPropertyService::PropertySet
-export([define_property/4,
define_properties/3,
get_number_of_properties/2,
get_all_property_names/3,
get_property_value/3,
get_properties/3,
get_all_properties/3,
delete_property/3,
delete_properties/3,
delete_all_properties/2,
is_property_defined/3]).
%%----------------------------------------------------------------------
%% Internal exports
%%----------------------------------------------------------------------
%%----------------------------------------------------------------------
%% Records
%%----------------------------------------------------------------------
-record(state, {property,
name,
completeName,
parent,
assocSession}).
%%----------------------------------------------------------------------
%% Macros
%%----------------------------------------------------------------------
-define(create_InitState(Pr, N, C, Pa, A),
#state{property = Pr,
name = N,
completeName = C,
parent = Pa,
assocSession = A}).
-define(get_PropertyRef(S), S#state.property).
-define(get_Name(S), S#state.name).
-define(get_CompleteName(S), S#state.completeName).
-define(get_Parent(S), S#state.parent).
-define(get_AssocSession(S), S#state.assocSession).
%%======================================================================
%% External functions
%%======================================================================
%%----------------------------------------------------------------------
%% Function : init/1
%% Returns : {ok, State} |
%% {ok, State, Timeout} |
%% ignore |
%% {stop, Reason}
%% Description: Initiates the server
%%----------------------------------------------------------------------
init([Name, CompleteName, Parent, AssocSession]) ->
PropTypes = [tk_long, tk_boolean],
%% WARNING if the order of the properties is changed so must
%% get_all_properties/3 in this module be as well!
PropDefs = [#'CosPropertyService_PropertyDef'
{property_name = "num_children",
property_value = #any{typecode=tk_long, value=0},
property_mode = fixed_readonly},
#'CosPropertyService_PropertyDef'
{property_name = "is_directory",
property_value = #any{typecode=tk_boolean, value=true},
property_mode = fixed_readonly}],
Prop = cosProperty:create_static_SetDef(PropTypes, PropDefs),
{ok, ?create_InitState(Prop, Name, CompleteName, Parent, AssocSession)}.
%%----------------------------------------------------------------------
%% Function : terminate/2
%% Returns : any (ignored by gen_server)
%% Description: Shutdown the server
%%----------------------------------------------------------------------
terminate(_Reason, _State) ->
ok.
%%======================================================================
%% CosFileTransfer::Directory
%%======================================================================
%%----------------------------------------------------------------------
%% Function : list
%% Arguments : Max - ulong()
%% Returns : {ok, FileList, FileIterator}
%% Description:
%%----------------------------------------------------------------------
list(OE_This, State, Max) ->
case 'CosFileTransfer_FileTransferSession':
oe_orber_get_content(?get_AssocSession(State), ?get_CompleteName(State),
OE_This) of
[] ->
{reply, {ok, [], corba:create_nil_objref()}, State};
FileList when length(FileList) > Max ->
{reply,
{ok, lists:sublist(FileList, Max),
'CosFileTransfer_FileIterator':oe_create([lists:nthtail(Max,
FileList)])},
State};
FileList ->
{reply, {ok, FileList, corba:create_nil_objref()}, State}
end.
%%======================================================================
%% CosFileTransfer::File
%%======================================================================
%%---------------------------------------------------------------------%
%% Function : '_get_name'
%% Arguments : -
%% Returns : CosFileTransfer::FileName - string
%% Description:
%%----------------------------------------------------------------------
'_get_name'(_OE_This, State) ->
{reply, ?get_Name(State), State}.
%%---------------------------------------------------------------------%
%% Function : '_get_complete_file_name'
%% Arguments : -
%% Returns : CosFileTransfer::FileNameList - a list of strings's
%% Description:
%%----------------------------------------------------------------------
'_get_complete_file_name'(_OE_This, State) ->
{reply, ?get_CompleteName(State), State}.
%%---------------------------------------------------------------------%
%% Function : '_get_parent'
%% Arguments : -
%% Returns : CosFileTransfer::Directory
%% Description:
%%----------------------------------------------------------------------
'_get_parent'(_OE_This, State) ->
{reply, ?get_Parent(State), State}.
%%---------------------------------------------------------------------%
%% Function : '_get_associated_session'
%% Arguments : -
%% Returns : CosFileTransfer::FileTransferSession
%% Description:
%%----------------------------------------------------------------------
'_get_associated_session'(_OE_This, State) ->
{reply, ?get_AssocSession(State), State}.
%%======================================================================
%% CosPropertyService::PropertySetDef
%%======================================================================
%%---------------------------------------------------------------------%
%% Function : get_allowed_property_types
%% Arguments : -
%% Returns : See cosProperty application.
%% Description:
%%----------------------------------------------------------------------
get_allowed_property_types(_OE_This, State) ->
{reply, 'CosPropertyService_PropertySetDef':
get_allowed_property_types(?get_PropertyRef(State)), State}.
%%---------------------------------------------------------------------%
%% Function : get_allowed_properties
%% Arguments : -
%% Returns : See cosProperty application.
%% Description:
%%----------------------------------------------------------------------
get_allowed_properties(_OE_This, State) ->
{reply, 'CosPropertyService_PropertySetDef':
get_allowed_properties(?get_PropertyRef(State)), State}.
%%---------------------------------------------------------------------%
%% Function : define_property_with_mode
%% Arguments : Name - string()
%% Value - #any{}
%% Mode - normal | read_only | fixed_normal | fixed_readonly
%% Returns : See cosProperty application.
%% Description:
%%----------------------------------------------------------------------
define_property_with_mode(_OE_This, State, Name, Value, Mode) ->
{reply, 'CosPropertyService_PropertySetDef':
define_property_with_mode(?get_PropertyRef(State), Name, Value, Mode), State}.
%%---------------------------------------------------------------------%
%% Function : define_properties_with_modes
%% Arguments : PropertyDefs - list of #'CosPropertyService_PropertyDef'{}
%% Returns : See cosProperty application.
%% Description:
%%----------------------------------------------------------------------
define_properties_with_modes(_OE_This, State, PropertyDefs) ->
{reply, 'CosPropertyService_PropertySetDef':
define_properties_with_modes(?get_PropertyRef(State), PropertyDefs), State}.
%%---------------------------------------------------------------------%
%% Function : get_property_mode
%% Arguments : Name - string()
%% Returns : See cosProperty application.
%% Description:
%%----------------------------------------------------------------------
get_property_mode(_OE_This, State, Name) ->
{reply, 'CosPropertyService_PropertySetDef':
get_property_mode(?get_PropertyRef(State), Name), State}.
%%---------------------------------------------------------------------%
%% Function : get_property_modes
%% Arguments : Names - a list of Name (i.e. string()'s).
%% Returns : See cosProperty application.
%% Description:
%%----------------------------------------------------------------------
get_property_modes(_OE_This, State, Names) ->
{reply, 'CosPropertyService_PropertySetDef':
get_property_modes(?get_PropertyRef(State), Names), State}.
%%---------------------------------------------------------------------%
%% Function : set_property_mode
%% Arguments : Name - string()
%% Mode - normal | read_only | fixed_normal | fixed_readonly
%% Returns : See cosProperty application.
%% Description:
%%----------------------------------------------------------------------
set_property_mode(_OE_This, State, Name, Mode) ->
{reply, 'CosPropertyService_PropertySetDef':
set_property_mode(?get_PropertyRef(State), Name, Mode), State}.
%%---------------------------------------------------------------------%
%% Function : set_property_modes
%% Arguments : Modes - a list of #'CosPropertyService_PropertyModes'{}
%% Returns : See cosProperty application.
%% Description:
%%----------------------------------------------------------------------
set_property_modes(_OE_This, State, PropertyModes) ->
{reply, 'CosPropertyService_PropertySetDef':
set_property_modes(?get_PropertyRef(State), PropertyModes), State}.
%%======================================================================
%% CosPropertyService::PropertySet
%%======================================================================
%%---------------------------------------------------------------------%
%% Function : define_property
%% Arguments : Name - string()
%% Value - #any{}
%% Returns : See cosProperty application.
%% Description:
%%----------------------------------------------------------------------
define_property(_OE_This, State, Name, Value) ->
{reply, 'CosPropertyService_PropertySet':
define_property(?get_PropertyRef(State), Name, Value), State}.
%%---------------------------------------------------------------------%
%% Function : define_properties
%% Arguments : Properties - a list of #'CosPropertyService_Property'{}
%% Returns : See cosProperty application.
%% Description:
%%----------------------------------------------------------------------
define_properties(_OE_This, State, Properties) ->
{reply, 'CosPropertyService_PropertySet':
define_properties(?get_PropertyRef(State), Properties), State}.
%%---------------------------------------------------------------------%
%% Function : get_number_of_properties
%% Arguments : -
%% Returns : See cosProperty application.
%% Description:
%%----------------------------------------------------------------------
get_number_of_properties(_OE_This, State) ->
{reply, 'CosPropertyService_PropertySet':
get_number_of_properties(?get_PropertyRef(State)), State}.
%%---------------------------------------------------------------------%
%% Function : get_all_property_names
%% Arguments : Max - ulong()
%% Returns : See cosProperty application.
%% Description:
%%----------------------------------------------------------------------
get_all_property_names(_OE_This, State, Max) ->
{reply, 'CosPropertyService_PropertySet':
get_all_property_names(?get_PropertyRef(State), Max), State}.
%%---------------------------------------------------------------------%
%% Function : get_property_value
%% Arguments : Name - string()
%% Returns : See cosProperty application.
%% Description:
%%----------------------------------------------------------------------
get_property_value(_OE_This, State, "num_children") ->
Count = 'CosFileTransfer_FileTransferSession':
oe_orber_count_children(?get_AssocSession(State), ?get_CompleteName(State)),
{reply, #any{typecode=tk_long, value=Count}, State};
get_property_value(_OE_This, State, Name) ->
{reply, 'CosPropertyService_PropertySet':
get_property_value(?get_PropertyRef(State), Name), State}.
%%---------------------------------------------------------------------%
%% Function : get_properties
%% Arguments : Names - a list of Name (i.e. string()'s)
%% Returns : See cosProperty application.
%% Description:
%%----------------------------------------------------------------------
get_properties(_OE_This, State, Names) ->
{Bool, Props} =
'CosPropertyService_PropertySet':get_properties(?get_PropertyRef(State),
Names),
NewProps = change_property(Props, [], State),
{reply, {Bool, NewProps}, State}.
change_property([], Acc, _State) ->
Acc;
change_property([H|T], Acc, State) ->
NewAcc =
case H of
#'CosPropertyService_Property'{property_name = "num_children"} ->
Count = 'CosFileTransfer_FileTransferSession':
oe_orber_count_children(?get_AssocSession(State),
?get_CompleteName(State)),
[H#'CosPropertyService_Property'
{property_value = #any{typecode=tk_long, value=Count}}|Acc];
_ ->
[H|Acc]
end,
change_property(T, NewAcc, State).
%%---------------------------------------------------------------------%
%% Function : get_all_properties
%% Arguments : Max - ulong()
%% Returns : See cosProperty application.
%% Description:
%%----------------------------------------------------------------------
get_all_properties(_OE_This, State, 0) ->
%% WARNING if we start supporting more than 10 Properties the next line must
%% be updated!
{ok, Props, _Iterator} =
'CosPropertyService_PropertySet':get_all_properties(?get_PropertyRef(State),
10),
NewProps = change_property(Props, [], State),
%% WARNING if the cosProperty:start_PropertiesIterator/1 is updated
%% it must be done hear as well.
{reply, {ok, [], cosProperty:start_PropertiesIterator(NewProps)}, State};
get_all_properties(_OE_This, State, Max) ->
{ok, Props, Iterator} =
'CosPropertyService_PropertySet':get_all_properties(?get_PropertyRef(State),
Max),
NewProps = change_property(Props, [], State),
{reply, {ok, NewProps, Iterator}, State}.
%%---------------------------------------------------------------------%
%% Function : delete_property
%% Arguments : Name - string()
%% Returns : See cosProperty application.
%% Description:
%%----------------------------------------------------------------------
delete_property(_OE_This, State, Name) ->
{reply, 'CosPropertyService_PropertySet':
delete_property(?get_PropertyRef(State), Name), State}.
%%---------------------------------------------------------------------%
%% Function : delete_properties
%% Arguments : Names - a list of Name (i.e. string()'s)
%% Returns : See cosProperty application.
%% Description:
%%----------------------------------------------------------------------
delete_properties(_OE_This, State, Names) ->
{reply, 'CosPropertyService_PropertySet':
delete_properties(?get_PropertyRef(State), Names), State}.
%%---------------------------------------------------------------------%
%% Function : delete_all_properties
%% Arguments : -
%% Returns : See cosProperty application.
%% Description:
%%----------------------------------------------------------------------
delete_all_properties(_OE_This, State) ->
{reply, 'CosPropertyService_PropertySet':
delete_all_properties(?get_PropertyRef(State)), State}.
%%---------------------------------------------------------------------%
%% Function : is_property_defined
%% Arguments : Name - string()
%% Returns : See cosProperty application.
%% Description:
%%----------------------------------------------------------------------
is_property_defined(_OE_This, State, Name) ->
{reply, 'CosPropertyService_PropertySet':
is_property_defined(?get_PropertyRef(State), Name), State}.
%%======================================================================
%% Internal functions
%%======================================================================
%%======================================================================
%% END OF MODULE
%%======================================================================