You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@shindig.apache.org by Christian Fischer <fl...@web.de> on 2012/09/25 20:37:38 UTC
enabling default features for all gadgets
Hi all,
i'm using shindig (inside Apache RAVE) for my master-thesis and need to
enable a default feature for all gadgets even the gadgets doesn't
require this feature.
In other words: i must inject a reference to a javascript file into each
gadget.
What is the best way to acquire this goal with shindig?
It is possible to set a feature as "required for all"? Then i only must
create a new feature.
If not, which source files are responsible for the <script ...> inclusion?
For now, the Code looks a bit confusing to me.
Thanks,
Christian
Re: enabling default features for all gadgets
Posted by Christian Fischer <fl...@web.de>.
i answer my question myself: it is not possible to enable the pubsub-2
feature with the shindig.properties (forced default libs) Method!
In File
http://svn.apache.org/repos/asf/shindig/trunk/features/src/main/javascript/features/container.site.gadget/gadget_holder.js
the Gadgets Spec where parsed and only if the Feature "pubsub-2" is
mentioned inside the Gadget, the OpenAjax Iframe is used, otherwise
there isn't any connection possible with the normal iframe.
So for me, i must use always the OpenAjaxIframeContainer by editing the
file above.
I hope this helps someone else who has the same problem.
Greets,
Christian
Am 08.10.2012 14:43, schrieb Christian Fischer:
> Hi Ryan,
>
> yes, that's right - shindig.properties works well - sorry for that. I
> get a deeper look in the code and saw that the gadgets.Hub Instance is
> there but the callback function is only called from the sample
> subsub-2 gadgets on same domain (localhost). So i must figure out if
> the problem exist on my used portal (apache RAVE) or on shindig.
>
> In Summary: The libs get successfully loaded in every gadget, the
> gadgets.Hub instance is there but gets no connection -
> gadgets.Hub.isConnected() return always false for all other Gadgets
> except for the sample pubsub-2 gadgets. Maybe you have some ideas for
> addressing the problem?
>
> Thanks,
> Christian
>
> Am 29.09.2012 15:21, schrieb Ryan Baxter:
>> So are you saying the javascript is loading correctly and it is just
>> that
>> you can't get the code to work? I thought you were saying that you
>> couldn't get the code to load in the gadgets by editing
>> shindig.properties.
>>
>> On Sat, Sep 29, 2012 at 2:14 AM, Christian Fischer
>> <fl...@web.de>wrote:
>>
>>> Hi,
>>>
>>> my custom feature is also in the extras-repository and the pubsub-2
>>> libs
>>> are loaded correctly inside the gadgets.
>>> Altough i cant't get any connection via the gadgets.Hub Instance except
>>> for the openajax sample gadgets - there it works like it should.
>>> -> Are the params inside the gadgets by pubsub-2 mandatory?
>>> -> Are there any domain restrictions? The Sample Gadgets are on
>>> localhost,
>>> whereas the other gadgets loaded from other domains like google.com,
>>> etc.
>>>
>>> I assume that there isn't a problem loading the libs correctly but
>>> there
>>> is a problem with my pubsub-2 use case?
>>>
>>> Thanks,
>>> Christian
>>>
>>> Am 28.09.2012 23:23, schrieb Ryan Baxter:
>>>
>>> My guess would be that maybe that is because it is in
>>> shindig-extras and
>>>> not part of the main features project, although I am just
>>>> guessing. At
>>>> the
>>>> end of the day they all get loaded into the same registry I believe
>>>> so I
>>>> don't see why this would matter.
>>>>
>>>> On Fri, Sep 28, 2012 at 11:37 AM, Christian Fischer
>>>> <flyinghuman@web.de
>>>>> wrote:
>>>> There's also a property in shindig.properties that lists the core
>>>>> features
>>>>>
>>>>>> everything must have (which is currently core and rpc)
>>>>>>
>>>>>> Hi, thanks for the answers - sorry for the delayed reply, but
>>>>>> i'm very
>>>>> busy at the moment.
>>>>>
>>>>> Enabling the features with shindig.proterties works fine for my
>>>>> custom
>>>>> feature :)
>>>>>
>>>>> but i also must enable the pubsub-2 feature for all gadgets.
>>>>> For an unknow reason for me, this doesn't work.
>>>>> I included the pubsub-2 feature in shindig.properties and also as a
>>>>> dependency of my custom feature.
>>>>> -> Why isn't there any gadgets.Hub available?
>>>>> Is this not possible with the dependency or shindig.properties
>>>>> Methods?
>>>>>
>>>>> Thanks a lot and nice Weekend,
>>>>>
>>>>> Christian
>>>>>
>>>>>
>>>>> On Tue, Sep 25, 2012 at 2:46 PM, Henry Saputra
>>>>> <henry.saputra@gmail.com
>>>>>>> *
>>>>>> *wrote:
>>>>>>
>>>>>> HI Christian,
>>>>>>
>>>>>>> You can either have custom DefaultGadgetSpecFactory.****parse() and
>>>>>>> decorate the ModulePrefs element with your features or have custom
>>>>>>> Processor.process() to add default or additional feature there.
>>>>>>>
>>>>>>> Or you can have custom rewriter early in the flow and add the
>>>>>>> required
>>>>>>> features via call to Gadget.addFeature before other rewriters
>>>>>>> process
>>>>>>> the gadget
>>>>>>>
>>>>>>> Hope this helps.
>>>>>>>
>>>>>>> - Henry
>>>>>>>
>>>>>>> On Tue, Sep 25, 2012 at 11:37 AM, Christian Fischer <
>>>>>>> flyinghuman@web.de>
>>>>>>> wrote:
>>>>>>>
>>>>>>> Hi all,
>>>>>>>> i'm using shindig (inside Apache RAVE) for my master-thesis and
>>>>>>>> need
>>>>>>>> to
>>>>>>>> enable a default feature for all gadgets even the gadgets doesn't
>>>>>>>> require
>>>>>>>> this feature.
>>>>>>>> In other words: i must inject a reference to a javascript file
>>>>>>>> into
>>>>>>>> each
>>>>>>>> gadget.
>>>>>>>>
>>>>>>>> What is the best way to acquire this goal with shindig?
>>>>>>>> It is possible to set a feature as "required for all"? Then i only
>>>>>>>> must
>>>>>>>> create a new feature.
>>>>>>>> If not, which source files are responsible for the <script ...>
>>>>>>>>
>>>>>>>> inclusion?
>>>>>>> For now, the Code looks a bit confusing to me.
>>>>>>>> Thanks,
>>>>>>>> Christian
>>>>>>>>
>>>>>>>>
>
>
Re: enabling default features for all gadgets
Posted by Christian Fischer <fl...@web.de>.
Hi Ryan,
yes, that's right - shindig.properties works well - sorry for that. I
get a deeper look in the code and saw that the gadgets.Hub Instance is
there but the callback function is only called from the sample subsub-2
gadgets on same domain (localhost). So i must figure out if the problem
exist on my used portal (apache RAVE) or on shindig.
In Summary: The libs get successfully loaded in every gadget, the
gadgets.Hub instance is there but gets no connection -
gadgets.Hub.isConnected() return always false for all other Gadgets
except for the sample pubsub-2 gadgets. Maybe you have some ideas for
addressing the problem?
Thanks,
Christian
Am 29.09.2012 15:21, schrieb Ryan Baxter:
> So are you saying the javascript is loading correctly and it is just that
> you can't get the code to work? I thought you were saying that you
> couldn't get the code to load in the gadgets by editing shindig.properties.
>
> On Sat, Sep 29, 2012 at 2:14 AM, Christian Fischer <fl...@web.de>wrote:
>
>> Hi,
>>
>> my custom feature is also in the extras-repository and the pubsub-2 libs
>> are loaded correctly inside the gadgets.
>> Altough i cant't get any connection via the gadgets.Hub Instance except
>> for the openajax sample gadgets - there it works like it should.
>> -> Are the params inside the gadgets by pubsub-2 mandatory?
>> -> Are there any domain restrictions? The Sample Gadgets are on localhost,
>> whereas the other gadgets loaded from other domains like google.com, etc.
>>
>> I assume that there isn't a problem loading the libs correctly but there
>> is a problem with my pubsub-2 use case?
>>
>> Thanks,
>> Christian
>>
>> Am 28.09.2012 23:23, schrieb Ryan Baxter:
>>
>> My guess would be that maybe that is because it is in shindig-extras and
>>> not part of the main features project, although I am just guessing. At
>>> the
>>> end of the day they all get loaded into the same registry I believe so I
>>> don't see why this would matter.
>>>
>>> On Fri, Sep 28, 2012 at 11:37 AM, Christian Fischer <flyinghuman@web.de
>>>> wrote:
>>> There's also a property in shindig.properties that lists the core
>>>> features
>>>>
>>>>> everything must have (which is currently core and rpc)
>>>>>
>>>>> Hi, thanks for the answers - sorry for the delayed reply, but i'm very
>>>> busy at the moment.
>>>>
>>>> Enabling the features with shindig.proterties works fine for my custom
>>>> feature :)
>>>>
>>>> but i also must enable the pubsub-2 feature for all gadgets.
>>>> For an unknow reason for me, this doesn't work.
>>>> I included the pubsub-2 feature in shindig.properties and also as a
>>>> dependency of my custom feature.
>>>> -> Why isn't there any gadgets.Hub available?
>>>> Is this not possible with the dependency or shindig.properties Methods?
>>>>
>>>> Thanks a lot and nice Weekend,
>>>>
>>>> Christian
>>>>
>>>>
>>>> On Tue, Sep 25, 2012 at 2:46 PM, Henry Saputra <henry.saputra@gmail.com
>>>>>> *
>>>>> *wrote:
>>>>>
>>>>> HI Christian,
>>>>>
>>>>>> You can either have custom DefaultGadgetSpecFactory.****parse() and
>>>>>> decorate the ModulePrefs element with your features or have custom
>>>>>> Processor.process() to add default or additional feature there.
>>>>>>
>>>>>> Or you can have custom rewriter early in the flow and add the required
>>>>>> features via call to Gadget.addFeature before other rewriters process
>>>>>> the gadget
>>>>>>
>>>>>> Hope this helps.
>>>>>>
>>>>>> - Henry
>>>>>>
>>>>>> On Tue, Sep 25, 2012 at 11:37 AM, Christian Fischer <
>>>>>> flyinghuman@web.de>
>>>>>> wrote:
>>>>>>
>>>>>> Hi all,
>>>>>>> i'm using shindig (inside Apache RAVE) for my master-thesis and need
>>>>>>> to
>>>>>>> enable a default feature for all gadgets even the gadgets doesn't
>>>>>>> require
>>>>>>> this feature.
>>>>>>> In other words: i must inject a reference to a javascript file into
>>>>>>> each
>>>>>>> gadget.
>>>>>>>
>>>>>>> What is the best way to acquire this goal with shindig?
>>>>>>> It is possible to set a feature as "required for all"? Then i only
>>>>>>> must
>>>>>>> create a new feature.
>>>>>>> If not, which source files are responsible for the <script ...>
>>>>>>>
>>>>>>> inclusion?
>>>>>> For now, the Code looks a bit confusing to me.
>>>>>>> Thanks,
>>>>>>> Christian
>>>>>>>
>>>>>>>
Re: enabling default features for all gadgets
Posted by Ryan Baxter <rb...@apache.org>.
So are you saying the javascript is loading correctly and it is just that
you can't get the code to work? I thought you were saying that you
couldn't get the code to load in the gadgets by editing shindig.properties.
On Sat, Sep 29, 2012 at 2:14 AM, Christian Fischer <fl...@web.de>wrote:
> Hi,
>
> my custom feature is also in the extras-repository and the pubsub-2 libs
> are loaded correctly inside the gadgets.
> Altough i cant't get any connection via the gadgets.Hub Instance except
> for the openajax sample gadgets - there it works like it should.
> -> Are the params inside the gadgets by pubsub-2 mandatory?
> -> Are there any domain restrictions? The Sample Gadgets are on localhost,
> whereas the other gadgets loaded from other domains like google.com, etc.
>
> I assume that there isn't a problem loading the libs correctly but there
> is a problem with my pubsub-2 use case?
>
> Thanks,
> Christian
>
> Am 28.09.2012 23:23, schrieb Ryan Baxter:
>
> My guess would be that maybe that is because it is in shindig-extras and
>> not part of the main features project, although I am just guessing. At
>> the
>> end of the day they all get loaded into the same registry I believe so I
>> don't see why this would matter.
>>
>> On Fri, Sep 28, 2012 at 11:37 AM, Christian Fischer <flyinghuman@web.de
>> >wrote:
>>
>> There's also a property in shindig.properties that lists the core
>>> features
>>>
>>>> everything must have (which is currently core and rpc)
>>>>
>>>> Hi, thanks for the answers - sorry for the delayed reply, but i'm very
>>> busy at the moment.
>>>
>>> Enabling the features with shindig.proterties works fine for my custom
>>> feature :)
>>>
>>> but i also must enable the pubsub-2 feature for all gadgets.
>>> For an unknow reason for me, this doesn't work.
>>> I included the pubsub-2 feature in shindig.properties and also as a
>>> dependency of my custom feature.
>>> -> Why isn't there any gadgets.Hub available?
>>> Is this not possible with the dependency or shindig.properties Methods?
>>>
>>> Thanks a lot and nice Weekend,
>>>
>>> Christian
>>>
>>>
>>> On Tue, Sep 25, 2012 at 2:46 PM, Henry Saputra <henry.saputra@gmail.com
>>>> >*
>>>> *wrote:
>>>>
>>>> HI Christian,
>>>>
>>>>> You can either have custom DefaultGadgetSpecFactory.****parse() and
>>>>> decorate the ModulePrefs element with your features or have custom
>>>>> Processor.process() to add default or additional feature there.
>>>>>
>>>>> Or you can have custom rewriter early in the flow and add the required
>>>>> features via call to Gadget.addFeature before other rewriters process
>>>>> the gadget
>>>>>
>>>>> Hope this helps.
>>>>>
>>>>> - Henry
>>>>>
>>>>> On Tue, Sep 25, 2012 at 11:37 AM, Christian Fischer <
>>>>> flyinghuman@web.de>
>>>>> wrote:
>>>>>
>>>>> Hi all,
>>>>>>
>>>>>> i'm using shindig (inside Apache RAVE) for my master-thesis and need
>>>>>> to
>>>>>> enable a default feature for all gadgets even the gadgets doesn't
>>>>>> require
>>>>>> this feature.
>>>>>> In other words: i must inject a reference to a javascript file into
>>>>>> each
>>>>>> gadget.
>>>>>>
>>>>>> What is the best way to acquire this goal with shindig?
>>>>>> It is possible to set a feature as "required for all"? Then i only
>>>>>> must
>>>>>> create a new feature.
>>>>>> If not, which source files are responsible for the <script ...>
>>>>>>
>>>>>> inclusion?
>>>>>
>>>>> For now, the Code looks a bit confusing to me.
>>>>>>
>>>>>> Thanks,
>>>>>> Christian
>>>>>>
>>>>>>
>
Re: enabling default features for all gadgets
Posted by Christian Fischer <fl...@web.de>.
Hi,
my custom feature is also in the extras-repository and the pubsub-2 libs
are loaded correctly inside the gadgets.
Altough i cant't get any connection via the gadgets.Hub Instance except
for the openajax sample gadgets - there it works like it should.
-> Are the params inside the gadgets by pubsub-2 mandatory?
-> Are there any domain restrictions? The Sample Gadgets are on
localhost, whereas the other gadgets loaded from other domains like
google.com, etc.
I assume that there isn't a problem loading the libs correctly but there
is a problem with my pubsub-2 use case?
Thanks,
Christian
Am 28.09.2012 23:23, schrieb Ryan Baxter:
> My guess would be that maybe that is because it is in shindig-extras and
> not part of the main features project, although I am just guessing. At the
> end of the day they all get loaded into the same registry I believe so I
> don't see why this would matter.
>
> On Fri, Sep 28, 2012 at 11:37 AM, Christian Fischer <fl...@web.de>wrote:
>
>> There's also a property in shindig.properties that lists the core features
>>> everything must have (which is currently core and rpc)
>>>
>> Hi, thanks for the answers - sorry for the delayed reply, but i'm very
>> busy at the moment.
>>
>> Enabling the features with shindig.proterties works fine for my custom
>> feature :)
>>
>> but i also must enable the pubsub-2 feature for all gadgets.
>> For an unknow reason for me, this doesn't work.
>> I included the pubsub-2 feature in shindig.properties and also as a
>> dependency of my custom feature.
>> -> Why isn't there any gadgets.Hub available?
>> Is this not possible with the dependency or shindig.properties Methods?
>>
>> Thanks a lot and nice Weekend,
>>
>> Christian
>>
>>
>>> On Tue, Sep 25, 2012 at 2:46 PM, Henry Saputra <he...@gmail.com>*
>>> *wrote:
>>>
>>> HI Christian,
>>>> You can either have custom DefaultGadgetSpecFactory.**parse() and
>>>> decorate the ModulePrefs element with your features or have custom
>>>> Processor.process() to add default or additional feature there.
>>>>
>>>> Or you can have custom rewriter early in the flow and add the required
>>>> features via call to Gadget.addFeature before other rewriters process
>>>> the gadget
>>>>
>>>> Hope this helps.
>>>>
>>>> - Henry
>>>>
>>>> On Tue, Sep 25, 2012 at 11:37 AM, Christian Fischer <fl...@web.de>
>>>> wrote:
>>>>
>>>>> Hi all,
>>>>>
>>>>> i'm using shindig (inside Apache RAVE) for my master-thesis and need to
>>>>> enable a default feature for all gadgets even the gadgets doesn't
>>>>> require
>>>>> this feature.
>>>>> In other words: i must inject a reference to a javascript file into each
>>>>> gadget.
>>>>>
>>>>> What is the best way to acquire this goal with shindig?
>>>>> It is possible to set a feature as "required for all"? Then i only must
>>>>> create a new feature.
>>>>> If not, which source files are responsible for the <script ...>
>>>>>
>>>> inclusion?
>>>>
>>>>> For now, the Code looks a bit confusing to me.
>>>>>
>>>>> Thanks,
>>>>> Christian
>>>>>
Re: enabling default features for all gadgets
Posted by Ryan Baxter <rb...@apache.org>.
My guess would be that maybe that is because it is in shindig-extras and
not part of the main features project, although I am just guessing. At the
end of the day they all get loaded into the same registry I believe so I
don't see why this would matter.
On Fri, Sep 28, 2012 at 11:37 AM, Christian Fischer <fl...@web.de>wrote:
>
> There's also a property in shindig.properties that lists the core features
>> everything must have (which is currently core and rpc)
>>
> Hi, thanks for the answers - sorry for the delayed reply, but i'm very
> busy at the moment.
>
> Enabling the features with shindig.proterties works fine for my custom
> feature :)
>
> but i also must enable the pubsub-2 feature for all gadgets.
> For an unknow reason for me, this doesn't work.
> I included the pubsub-2 feature in shindig.properties and also as a
> dependency of my custom feature.
> -> Why isn't there any gadgets.Hub available?
> Is this not possible with the dependency or shindig.properties Methods?
>
> Thanks a lot and nice Weekend,
>
> Christian
>
>
>> On Tue, Sep 25, 2012 at 2:46 PM, Henry Saputra <he...@gmail.com>*
>> *wrote:
>>
>> HI Christian,
>>>
>>> You can either have custom DefaultGadgetSpecFactory.**parse() and
>>> decorate the ModulePrefs element with your features or have custom
>>> Processor.process() to add default or additional feature there.
>>>
>>> Or you can have custom rewriter early in the flow and add the required
>>> features via call to Gadget.addFeature before other rewriters process
>>> the gadget
>>>
>>> Hope this helps.
>>>
>>> - Henry
>>>
>>> On Tue, Sep 25, 2012 at 11:37 AM, Christian Fischer <fl...@web.de>
>>> wrote:
>>>
>>>> Hi all,
>>>>
>>>> i'm using shindig (inside Apache RAVE) for my master-thesis and need to
>>>> enable a default feature for all gadgets even the gadgets doesn't
>>>> require
>>>> this feature.
>>>> In other words: i must inject a reference to a javascript file into each
>>>> gadget.
>>>>
>>>> What is the best way to acquire this goal with shindig?
>>>> It is possible to set a feature as "required for all"? Then i only must
>>>> create a new feature.
>>>> If not, which source files are responsible for the <script ...>
>>>>
>>> inclusion?
>>>
>>>> For now, the Code looks a bit confusing to me.
>>>>
>>>> Thanks,
>>>> Christian
>>>>
>>>
>
Re: enabling default features for all gadgets
Posted by Christian Fischer <fl...@web.de>.
> There's also a property in shindig.properties that lists the core features
> everything must have (which is currently core and rpc)
Hi, thanks for the answers - sorry for the delayed reply, but i'm very
busy at the moment.
Enabling the features with shindig.proterties works fine for my custom
feature :)
but i also must enable the pubsub-2 feature for all gadgets.
For an unknow reason for me, this doesn't work.
I included the pubsub-2 feature in shindig.properties and also as a
dependency of my custom feature.
-> Why isn't there any gadgets.Hub available?
Is this not possible with the dependency or shindig.properties Methods?
Thanks a lot and nice Weekend,
Christian
>
> On Tue, Sep 25, 2012 at 2:46 PM, Henry Saputra <he...@gmail.com>wrote:
>
>> HI Christian,
>>
>> You can either have custom DefaultGadgetSpecFactory.parse() and
>> decorate the ModulePrefs element with your features or have custom
>> Processor.process() to add default or additional feature there.
>>
>> Or you can have custom rewriter early in the flow and add the required
>> features via call to Gadget.addFeature before other rewriters process
>> the gadget
>>
>> Hope this helps.
>>
>> - Henry
>>
>> On Tue, Sep 25, 2012 at 11:37 AM, Christian Fischer <fl...@web.de>
>> wrote:
>>> Hi all,
>>>
>>> i'm using shindig (inside Apache RAVE) for my master-thesis and need to
>>> enable a default feature for all gadgets even the gadgets doesn't require
>>> this feature.
>>> In other words: i must inject a reference to a javascript file into each
>>> gadget.
>>>
>>> What is the best way to acquire this goal with shindig?
>>> It is possible to set a feature as "required for all"? Then i only must
>>> create a new feature.
>>> If not, which source files are responsible for the <script ...>
>> inclusion?
>>> For now, the Code looks a bit confusing to me.
>>>
>>> Thanks,
>>> Christian
Re: enabling default features for all gadgets
Posted by Dan Dumont <dd...@apache.org>.
There's also a property in shindig.properties that lists the core features
everything must have (which is currently core and rpc)
On Tue, Sep 25, 2012 at 2:46 PM, Henry Saputra <he...@gmail.com>wrote:
> HI Christian,
>
> You can either have custom DefaultGadgetSpecFactory.parse() and
> decorate the ModulePrefs element with your features or have custom
> Processor.process() to add default or additional feature there.
>
> Or you can have custom rewriter early in the flow and add the required
> features via call to Gadget.addFeature before other rewriters process
> the gadget
>
> Hope this helps.
>
> - Henry
>
> On Tue, Sep 25, 2012 at 11:37 AM, Christian Fischer <fl...@web.de>
> wrote:
> > Hi all,
> >
> > i'm using shindig (inside Apache RAVE) for my master-thesis and need to
> > enable a default feature for all gadgets even the gadgets doesn't require
> > this feature.
> > In other words: i must inject a reference to a javascript file into each
> > gadget.
> >
> > What is the best way to acquire this goal with shindig?
> > It is possible to set a feature as "required for all"? Then i only must
> > create a new feature.
> > If not, which source files are responsible for the <script ...>
> inclusion?
> >
> > For now, the Code looks a bit confusing to me.
> >
> > Thanks,
> > Christian
>
Re: enabling default features for all gadgets
Posted by Henry Saputra <he...@gmail.com>.
HI Christian,
You can either have custom DefaultGadgetSpecFactory.parse() and
decorate the ModulePrefs element with your features or have custom
Processor.process() to add default or additional feature there.
Or you can have custom rewriter early in the flow and add the required
features via call to Gadget.addFeature before other rewriters process
the gadget
Hope this helps.
- Henry
On Tue, Sep 25, 2012 at 11:37 AM, Christian Fischer <fl...@web.de> wrote:
> Hi all,
>
> i'm using shindig (inside Apache RAVE) for my master-thesis and need to
> enable a default feature for all gadgets even the gadgets doesn't require
> this feature.
> In other words: i must inject a reference to a javascript file into each
> gadget.
>
> What is the best way to acquire this goal with shindig?
> It is possible to set a feature as "required for all"? Then i only must
> create a new feature.
> If not, which source files are responsible for the <script ...> inclusion?
>
> For now, the Code looks a bit confusing to me.
>
> Thanks,
> Christian