Skip to content
This repository has been archived by the owner on Nov 9, 2017. It is now read-only.

Commit

Permalink
Merge branch 'use-api-3.1' into move-path-to-api
Browse files Browse the repository at this point in the history
Conflicts:
	zanata-war/src/main/java/org/zanata/rest/service/CopyTransResourceService.java
	zanata-war/src/main/java/org/zanata/rest/service/VersionService.java
  • Loading branch information
seanf committed Sep 12, 2013
2 parents b3d73b3 + cb2adae commit 010b775
Show file tree
Hide file tree
Showing 22 changed files with 153 additions and 40 deletions.
11 changes: 7 additions & 4 deletions functional-test/src/main/java/org/zanata/page/AbstractPage.java
Expand Up @@ -82,11 +82,14 @@ protected void clickAndCheckErrors(WebElement button)
protected void clickAndExpectErrors(WebElement button)
{
button.click();
List<String> errors = getErrors();
if (errors.isEmpty())
refreshPageUntil(this, new Predicate<WebDriver>()
{
throw new RuntimeException("Errors expected, none found.");
}
@Override
public boolean apply(WebDriver input)
{
return getErrors().size() > 0;
}
});
}

public List<String> getErrors()
Expand Down
6 changes: 6 additions & 0 deletions functional-test/src/test/resources/conf/standalone.xml
Expand Up @@ -218,6 +218,7 @@
<subsystem xmlns="urn:jboss:domain:naming:1.3">
<bindings>
<simple name="java:global/zanata/security/auth-policy-names/internal" value="zanata.internal"/>
<simple name="java:global/zanata/security/auth-policy-names/openid" value="zanata.openid"/>
<simple name="java:global/zanata/security/admin-users" value="admin"/>
<simple name="java:global/zanata/email/default-from-address" value="no-reply@zanata.org" />
<simple name="java:global/zanata/files/document-storage-directory" value="${project.build.directory}/zanata-documents"/>
Expand Down Expand Up @@ -262,6 +263,11 @@
<login-module code="org.jboss.seam.security.jaas.SeamLoginModule" flag="required"/>
</authentication>
</security-domain>
<security-domain name="zanata.openid">
<authentication>
<login-module code="org.zanata.security.OpenIdLoginModule" flag="required"/>
</authentication>
</security-domain>
</security-domains>
</subsystem>
<subsystem xmlns="urn:jboss:domain:threads:1.1"/>
Expand Down
4 changes: 2 additions & 2 deletions pom.xml
Expand Up @@ -27,15 +27,15 @@
<icu4j.version>4.8</icu4j.version>
<lombok.source.dir>${project.build.sourceDirectory}/org/zanata</lombok.source.dir>
<lucene.version>3.5.0</lucene.version>
<seam.version>2.3.0.Final</seam.version>
<seam.version>2.3.1.Final</seam.version>
<gwteventservice.version>1.2.1</gwteventservice.version>
<okapi.version>0.22</okapi.version>

<zanata.api.version>3.1-SNAPSHOT</zanata.api.version>
<!-- This should always be the previous version of the used api version above (but only 3.0.1 or later will work) -->
<zanata.api.compat.version>3.0.1</zanata.api.compat.version>
<zanata.client.version>3.0.1</zanata.client.version>
<zanata.common.version>3.0.2-SNAPSHOT</zanata.common.version>
<zanata.common.version>3.0.2</zanata.common.version>

<richfaces.version>4.3.2.Final</richfaces.version>

Expand Down
30 changes: 20 additions & 10 deletions zanata-war/src/main/java/org/zanata/action/ProfileAction.java
Expand Up @@ -22,6 +22,7 @@

import java.io.Serializable;

import javax.faces.event.ValueChangeEvent;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;

Expand Down Expand Up @@ -63,10 +64,11 @@ public class ProfileAction implements Serializable
private String username;
private String activationKey;
private boolean valid;
private boolean newUser;

@In
ApplicationConfiguration applicationConfiguration;

@Logger
Log log;

Expand All @@ -93,24 +95,24 @@ public class ProfileAction implements Serializable

@In
RegisterService registerServiceImpl;

@In
EmailChangeService emailChangeService;

private void validateEmail(String email)
{
HPerson person = personDAO.findByEmail(email);

if( person != null && !person.getAccount().equals( authenticatedAccount ) )
{
valid = false;
FacesMessages.instance().addToControl("email", "This email address is already taken");
}
}

private void validateUsername()
private void validateUsername(String username)
{
HAccount account = accountDAO.getByUsername(this.username);
HAccount account = accountDAO.getByUsername(username);

if( account != null && !account.equals( authenticatedAccount ) )
{
Expand All @@ -119,19 +121,26 @@ private void validateUsername()
}
}

public void verifyUsernameAvailable(ValueChangeEvent e)
{
String username = (String) e.getNewValue();
validateUsername(username);
}

@Create
public void onCreate()
{
username = identity.getCredentials().getUsername();
if (identityStore.isNewUser(username))
newUser = identityStore.isNewUser(username);
if (newUser)
{
name = identity.getCredentials().getUsername();
String domain = applicationConfiguration.getDomainName();
if( domain == null )
{
email = "";
}
else
else
{
if( applicationConfiguration.isOpenIdAuth() )
{
Expand Down Expand Up @@ -188,7 +197,7 @@ public String getUsername()
public void setUsername(String username)
{
this.username = username;
validateUsername();
validateUsername(username);
}

public String getActivationKey()
Expand All @@ -206,7 +215,7 @@ public String edit()
{
this.valid = true;
validateEmail(this.email);
validateUsername();
validateUsername(username);

if( !this.isValid() )
{
Expand Down Expand Up @@ -267,7 +276,8 @@ public boolean isValid()

public boolean isNewUser()
{
return identityStore.isNewUser(username);
// in case someone else has registered in the middle
return newUser || identityStore.isNewUser(username);
}

}
@@ -1,6 +1,7 @@
package org.zanata.rest;

import java.io.IOException;
import java.lang.annotation.Annotation;
import java.util.Collection;

import javax.ws.rs.core.Response.Status;
Expand All @@ -24,6 +25,7 @@
import org.jboss.seam.log.Log;
import org.jboss.seam.resteasy.ResteasyBootstrap;
import org.jboss.seam.resteasy.SeamResteasyProviderFactory;
import org.zanata.seam.resteasy.IgnoreInterfacePath;

@Name("org.jboss.seam.resteasy.bootstrap")
@Scope(ScopeType.APPLICATION)
Expand Down Expand Up @@ -88,4 +90,41 @@ public void invoke(HttpRequest request, HttpResponse response)
}
};
}

/**
* If the seam bean is annotated with @IgnoreInterfacePath, any @Path
* annotation on the bean's interfaces will be ignored when deciding whether
* to inject @Context variables based on the interface class or the bean
* class.
* @param annotation
* @param seamComponent
* @return
*/
@Override
protected Class getAnnotatedInterface(Class<? extends Annotation> annotation,
Component seamComponent)
{
if (annotation == javax.ws.rs.Path.class &&
hasAnnotation(seamComponent.getBeanClass(), IgnoreInterfacePath.class))
{
return null;
}
else
{
return super.getAnnotatedInterface(annotation, seamComponent);
}
}

private static boolean hasAnnotation(Class clazz,
Class<? extends Annotation> type)
{
for (Annotation annotation : clazz.getAnnotations())
{
if (annotation.annotationType() == type)
{
return true;
}
}
return false;
}
}
Expand Up @@ -34,10 +34,12 @@
import org.zanata.model.HPerson;
import org.zanata.rest.MediaTypes;
import org.zanata.rest.dto.Account;
import org.zanata.seam.resteasy.IgnoreInterfacePath;

@Name(AccountResource.SERVICE_PATH)
@Path("/accounts/u/{username:[a-z\\d_]{3,20}}")
@Transactional
@IgnoreInterfacePath
public class AccountService implements AccountResource
{

Expand Down
Expand Up @@ -51,6 +51,7 @@
import org.zanata.rest.dto.ProcessStatus;
import org.zanata.rest.dto.resource.Resource;
import org.zanata.rest.dto.resource.TranslationsResource;
import org.zanata.seam.resteasy.IgnoreInterfacePath;
import org.zanata.security.ZanataIdentity;
import org.zanata.service.AsyncTaskManagerService;
import org.zanata.service.DocumentService;
Expand All @@ -74,6 +75,7 @@
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
@Transactional
@Slf4j
@IgnoreInterfacePath
public class AsynchronousProcessResourceService implements AsynchronousProcessResource
{
@In
Expand Down
Expand Up @@ -25,20 +25,21 @@

import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.security.Restrict;
import org.zanata.action.CopyTransManager;
import org.zanata.async.tasks.CopyTransTask;
import org.zanata.dao.DocumentDAO;
import org.zanata.model.HDocument;
import org.zanata.rest.NoSuchEntityException;
import org.zanata.rest.dto.CopyTransStatus;
import org.zanata.seam.resteasy.IgnoreInterfacePath;
import org.zanata.security.ZanataIdentity;

/**
* @author Carlos Munoz <a href="mailto:camunoz@redhat.com">camunoz@redhat.com</a>
*/
@Name("copyTransResourceService")
@Path(CopyTransResource.SERVICE_PATH)
@IgnoreInterfacePath
public class CopyTransResourceService implements CopyTransResource
{
@In
Expand Down
Expand Up @@ -66,6 +66,7 @@
import org.zanata.rest.dto.resource.Resource;
import org.zanata.rest.dto.resource.TextFlowTarget;
import org.zanata.rest.dto.resource.TranslationsResource;
import org.zanata.seam.resteasy.IgnoreInterfacePath;
import org.zanata.service.FileSystemService;
import org.zanata.service.FileSystemService.DownloadDescriptorProperties;
import org.zanata.service.TranslationFileService;
Expand All @@ -78,6 +79,7 @@
@Path(FileResource.FILE_RESOURCE)
@Produces( { MediaType.APPLICATION_OCTET_STREAM })
@Consumes( { MediaType.APPLICATION_OCTET_STREAM })
@IgnoreInterfacePath
public class FileService implements FileResource
{
private static final String FILE_TYPE_OFFLINE_PO = "offlinepo";
Expand Down
Expand Up @@ -33,11 +33,13 @@
import org.zanata.rest.dto.Glossary;
import org.zanata.rest.dto.GlossaryEntry;
import org.zanata.rest.dto.GlossaryTerm;
import org.zanata.seam.resteasy.IgnoreInterfacePath;
import org.zanata.service.GlossaryFileService;

@Name("glossaryService")
@Path(GlossaryService.SERVICE_PATH)
@Transactional
@IgnoreInterfacePath
public class GlossaryService implements GlossaryResource
{
@Context
Expand Down
Expand Up @@ -57,12 +57,14 @@
import org.zanata.model.validator.SlugValidator;
import org.zanata.rest.MediaTypes;
import org.zanata.rest.dto.ProjectIteration;
import org.zanata.seam.resteasy.IgnoreInterfacePath;

import com.google.common.base.Objects;

@Name("projectIterationService")
@Path(ProjectIterationService.SERVICE_PATH)
@Transactional
@IgnoreInterfacePath
public class ProjectIterationService implements ProjectIterationResource
{
/** Project Identifier. */
Expand Down
Expand Up @@ -44,12 +44,14 @@
import org.zanata.rest.dto.Link;
import org.zanata.rest.dto.Project;
import org.zanata.rest.dto.ProjectIteration;
import org.zanata.seam.resteasy.IgnoreInterfacePath;

import com.google.common.base.Objects;

@Name("projectService")
@Path(ProjectService.SERVICE_PATH)
@Transactional
@IgnoreInterfacePath
public class ProjectService implements ProjectResource
{
/** Project Identifier. */
Expand Down
Expand Up @@ -51,12 +51,14 @@
import org.zanata.rest.MediaTypes;
import org.zanata.rest.dto.Link;
import org.zanata.rest.dto.Project;
import org.zanata.seam.resteasy.IgnoreInterfacePath;

import com.google.common.base.Objects;

@Name("projectsService")
@Path(ProjectsResource.SERVICE_PATH)
@Transactional
@IgnoreInterfacePath
public class ProjectsService implements ProjectsResource
{

Expand Down
Expand Up @@ -44,6 +44,7 @@
import org.zanata.rest.dto.resource.Resource;
import org.zanata.rest.dto.resource.ResourceMeta;
import org.zanata.rest.dto.resource.TextFlow;
import org.zanata.seam.resteasy.IgnoreInterfacePath;
import org.zanata.service.DocumentService;
import org.zanata.service.LocaleService;

Expand All @@ -66,6 +67,7 @@
import javax.ws.rs.core.Request;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriInfo;

import java.lang.reflect.Type;
import java.net.URI;
import java.util.ArrayList;
Expand All @@ -82,6 +84,7 @@
@Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
@Consumes( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
@Transactional
@IgnoreInterfacePath
public class SourceDocResourceService implements SourceDocResource
{

Expand Down
Expand Up @@ -64,20 +64,23 @@
import org.zanata.model.HProjectIteration;
import org.zanata.model.HTextFlowTarget;
import org.zanata.rest.dto.resource.TranslationsResource;
import org.zanata.seam.resteasy.IgnoreInterfacePath;
import org.zanata.security.ZanataIdentity;
import org.zanata.service.CopyTransService;
import org.zanata.service.LocaleService;
import org.zanata.service.TranslationService;

import com.google.common.base.Optional;

/**
* This service allows clients to push and pull both source documents and translations.
*/
@Name("translatedDocResourceService")
@Path(TranslatedDocResourceService.SERVICE_PATH)
@Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
@Consumes( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
@Transactional
/**
* This service allows clients to push and pull both source documents and translations.
*/
@IgnoreInterfacePath
public class TranslatedDocResourceService implements TranslatedDocResource
{

Expand Down

0 comments on commit 010b775

Please sign in to comment.