Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Bauke Scholtz
committed
Apr 2, 2015
1 parent
3202876
commit 2d640e0
Showing
3 changed files
with
132 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Original file line | Diff line number | Diff line change |
---|---|---|---|
@@ -0,0 +1,68 @@ | |||
/* | |||
* Copyright 2015 OmniFaces. | |||
* | |||
* 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. | |||
*/ | |||
package org.omnifaces.cdi; | |||
|
|||
import static java.lang.annotation.ElementType.FIELD; | |||
import static java.lang.annotation.ElementType.METHOD; | |||
import static java.lang.annotation.ElementType.PARAMETER; | |||
import static java.lang.annotation.ElementType.TYPE; | |||
import static java.lang.annotation.RetentionPolicy.RUNTIME; | |||
|
|||
import java.lang.annotation.Retention; | |||
import java.lang.annotation.Target; | |||
|
|||
import javax.enterprise.util.Nonbinding; | |||
import javax.inject.Qualifier; | |||
|
|||
import org.omnifaces.cdi.cookie.RequestCookieProducer; | |||
|
|||
/** | |||
* <p> | |||
* The CDI annotation {@link Cookie} allows you to inject a HTTP request cookie value from the current JSF context in | |||
* a CDI managed bean. It's basically like <code>@ManagedProperty("#{cookieName}") private String cookieName;</code> | |||
* in a "plain old" JSF managed bean. | |||
* <p> | |||
* By default the name of the cookie is taken from the name of the variable into which injection takes place. | |||
* The example below injects the cookie with name <code>foo</code>. | |||
* <pre> | |||
* @Inject @Cookie | |||
* private String foo; | |||
* </pre> | |||
* <p> | |||
* The name can be optionally specified via the <code>name</code> attribute. | |||
* The example below injects the cookie with name <code>foo</code> into a variable named <code>bar</code>. | |||
* <pre> | |||
* @Inject @Cookie(name="foo") | |||
* private String bar; | |||
* </pre> | |||
* <p> | |||
* Validation is by design not supported as cookies are usually beyond enduser's control. | |||
* TODO: conversion? | |||
* | |||
* @since 2.1 | |||
* @author Bauke Scholtz | |||
* @see RequestCookieProducer | |||
*/ | |||
@Qualifier | |||
@Retention(RUNTIME) | |||
@Target({ TYPE, METHOD, FIELD, PARAMETER }) | |||
public @interface Cookie { | |||
|
|||
/** | |||
* (Optional) The name of the request cookie. If not specified the name of the injection target field will be used. | |||
* | |||
* @return The name of the request cookie. | |||
*/ | |||
@Nonbinding String name() default ""; | |||
|
|||
} |
47 changes: 47 additions & 0 deletions
47
src/main/java/org/omnifaces/cdi/cookie/RequestCookieProducer.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Original file line | Diff line number | Diff line change |
---|---|---|---|
@@ -0,0 +1,47 @@ | |||
/* | |||
* Copyright 2015 OmniFaces. | |||
* | |||
* 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. | |||
*/ | |||
package org.omnifaces.cdi.cookie; | |||
|
|||
import static org.omnifaces.util.Beans.getQualifier; | |||
import static org.omnifaces.util.Faces.getRequestCookie; | |||
|
|||
import javax.enterprise.inject.Produces; | |||
import javax.enterprise.inject.spi.InjectionPoint; | |||
import javax.inject.Inject; | |||
|
|||
import org.omnifaces.cdi.Cookie; | |||
|
|||
/** | |||
* <p> | |||
* Producer for injecting a JSF request cookie as defined by the {@link Cookie} annotation. | |||
* | |||
* @since 2.1 | |||
* @author Bauke Scholtz | |||
* @see RequestCookieProducer | |||
*/ | |||
public class RequestCookieProducer { | |||
|
|||
@SuppressWarnings("unused") // Workaround for OpenWebBeans not properly passing it as produce() method argument. | |||
@Inject | |||
private InjectionPoint injectionPoint; | |||
|
|||
@Produces | |||
@Cookie | |||
public String produce(InjectionPoint injectionPoint) { | |||
Cookie cookie = getQualifier(injectionPoint, Cookie.class); | |||
String name = cookie.name().isEmpty() ? injectionPoint.getMember().getName() : cookie.name(); | |||
String value = getRequestCookie(name); | |||
return value; | |||
} | |||
|
|||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters