Merge remote-tracking branch 'upstream/master'
This commit is contained in:
@@ -6,10 +6,8 @@ import org.neo4j.cineasts.domain.Rating;
|
||||
import org.neo4j.cineasts.domain.User;
|
||||
import org.neo4j.cineasts.repository.MovieRepository;
|
||||
import org.neo4j.cineasts.repository.PersonRepository;
|
||||
import org.neo4j.cineasts.service.CineastsRepository;
|
||||
import org.neo4j.cineasts.service.CineastsUserDetailsService;
|
||||
import org.neo4j.cineasts.service.DatabasePopulator;
|
||||
import org.neo4j.helpers.collection.IteratorUtil;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@@ -62,7 +60,7 @@ public class MovieController {
|
||||
model.addAttribute("stars", stars);
|
||||
Rating rating = null;
|
||||
if (user!=null) rating = movie.getRelationshipTo(user, Rating.class, "RATED");
|
||||
if (rating == null) rating = new Rating().rate(stars,null);
|
||||
if (rating == null) rating = new Rating().rate(stars, null);
|
||||
model.addAttribute("userRating",rating);
|
||||
}
|
||||
return "/movies/show";
|
||||
@@ -72,11 +70,7 @@ public class MovieController {
|
||||
public String updateMovie(Model model, @PathVariable String movieId, @RequestParam(value = "rated",required = false) Integer stars, @RequestParam(value = "comment",required = false) String comment) {
|
||||
Movie movie = movieRepository.findById(movieId);
|
||||
User user = userDetailsService.getUserFromSession();
|
||||
if (user != null && movie != null) {
|
||||
int stars1 = stars==null ? -1 : stars;
|
||||
String comment1 = comment!=null ? comment.trim() : null;
|
||||
user.rate(movie, stars1, comment1);
|
||||
}
|
||||
userDetailsService.rate(user, movie, stars, comment);
|
||||
return singleMovieView(model,movieId);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package org.neo4j.cineasts.service;
|
||||
|
||||
import org.neo4j.cineasts.domain.Movie;
|
||||
import org.neo4j.cineasts.domain.User;
|
||||
import org.neo4j.cineasts.repository.UserRepository;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@@ -74,4 +75,12 @@ public class CineastsUserDetailsService implements UserDetailsService {
|
||||
user.addFriend(friend);
|
||||
}
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public void rate(User user, Movie movie, Integer stars, String comment) {
|
||||
if (user == null || movie == null) return;
|
||||
int stars1 = stars==null ? -1 : stars;
|
||||
String comment1 = comment!=null ? comment.trim() : null;
|
||||
user.rate(movie, stars1, comment1);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -108,6 +108,9 @@ public class MappingInfrastructureFactoryBean implements FactoryBean<Infrastruct
|
||||
if (this.conversionService==null) {
|
||||
this.conversionService=new Neo4jConversionServiceFactoryBean().getObject();
|
||||
}
|
||||
if (entityStateHandler == null) {
|
||||
entityStateHandler = new EntityStateHandler(mappingContext,graphDatabase);
|
||||
}
|
||||
if (nodeEntityInstantiator == null) {
|
||||
nodeEntityInstantiator = new NodeEntityInstantiator(entityStateHandler);
|
||||
}
|
||||
|
||||
@@ -95,7 +95,7 @@ public class Neo4jEntityConverterImpl<T,S extends PropertyContainer> implements
|
||||
@Override
|
||||
public <R extends T> R loadEntity(R entity, S source, MappingPolicy mappingPolicy, Neo4jPersistentEntityImpl<R> persistentEntity, final Neo4jTemplate template) {
|
||||
if (mappingPolicy.shouldLoad()) {
|
||||
final BeanWrapper<Neo4jPersistentEntity<R>, R> wrapper = BeanWrapper.create(entity, conversionService);
|
||||
final BeanWrapper<Neo4jPersistentEntity<R>, R> wrapper = BeanWrapper.<Neo4jPersistentEntity<R>, R>create(entity, conversionService);
|
||||
sourceStateTransmitter.copyPropertiesFrom(wrapper, source, persistentEntity,mappingPolicy, template);
|
||||
// 6) handle cascading fetches
|
||||
cascadeFetch(persistentEntity, wrapper, mappingPolicy, template);
|
||||
@@ -141,7 +141,7 @@ public class Neo4jEntityConverterImpl<T,S extends PropertyContainer> implements
|
||||
return;
|
||||
}
|
||||
|
||||
final BeanWrapper<Neo4jPersistentEntity<T>, T> wrapper = BeanWrapper.create(source, conversionService);
|
||||
final BeanWrapper<Neo4jPersistentEntity<T>, T> wrapper = BeanWrapper.<Neo4jPersistentEntity<T>, T>create(source, conversionService);
|
||||
if (sink == null) {
|
||||
sink = entityStateHandler.useOrCreateState(source,sink); // todo handling of changed state
|
||||
entityStateHandler.setPersistentState(source, sink);
|
||||
|
||||
@@ -55,7 +55,7 @@ public class Neo4jEntityFetchHandler {
|
||||
if (property.getTypeInformation().isCollectionLike()) {
|
||||
List<Object> replacement = new ArrayList<Object>();
|
||||
for (Object inner : ((Iterable) value)) {
|
||||
final BeanWrapper<Neo4jPersistentEntity<Object>, Object> innerWrapper = BeanWrapper.create(inner, conversionService);
|
||||
final BeanWrapper<Neo4jPersistentEntity<Object>, Object> innerWrapper = BeanWrapper.<Neo4jPersistentEntity<Object>, Object>create(inner, conversionService);
|
||||
final PropertyContainer state = entityStateHandler.getPersistentState(inner);
|
||||
fetchValue(innerWrapper, state, persistentEntity, mappingPolicy, template);
|
||||
replacement.add(inner);
|
||||
@@ -63,7 +63,7 @@ public class Neo4jEntityFetchHandler {
|
||||
}
|
||||
return replacement;
|
||||
} else {
|
||||
final BeanWrapper<Neo4jPersistentEntity<Object>, Object> innerWrapper = BeanWrapper.create(value, conversionService);
|
||||
final BeanWrapper<Neo4jPersistentEntity<Object>, Object> innerWrapper = BeanWrapper.<Neo4jPersistentEntity<Object>, Object>create(value, conversionService);
|
||||
final PropertyContainer state = entityStateHandler.getPersistentState(value);
|
||||
fetchValue(innerWrapper, state, persistentEntity, mappingPolicy, template);
|
||||
// sourceStateTransmitter.copyPropertiesFrom(innerWrapper, entityStateHandler.<S>getPersistentState(value), persistentEntity);
|
||||
|
||||
@@ -28,11 +28,13 @@ import org.neo4j.test.ImpermanentGraphDatabase;
|
||||
import org.springframework.dao.DataAccessException;
|
||||
import org.springframework.data.neo4j.conversion.ResultConverter;
|
||||
import org.springframework.data.neo4j.core.GraphDatabase;
|
||||
import org.springframework.data.neo4j.model.Person;
|
||||
import org.springframework.data.neo4j.support.DelegatingGraphDatabase;
|
||||
import org.springframework.data.neo4j.support.Neo4jTemplate;
|
||||
import org.springframework.data.neo4j.support.index.IndexType;
|
||||
import org.springframework.transaction.PlatformTransactionManager;
|
||||
import org.springframework.transaction.TransactionStatus;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.transaction.jta.JtaTransactionManager;
|
||||
import org.springframework.transaction.support.TransactionCallbackWithoutResult;
|
||||
import org.springframework.transaction.support.TransactionTemplate;
|
||||
@@ -89,6 +91,14 @@ public class Neo4jTemplateApiTest {
|
||||
assertNotNull(node.getProperty("name"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testInstantiateEntity() throws Exception {
|
||||
Neo4jTemplate template = new Neo4jTemplate(graphDatabase,transactionManager);
|
||||
Transaction tx = template.beginTx();
|
||||
Person michael = template.save(new Person("Michael", 37));
|
||||
assertNotNull(michael.getId());
|
||||
}
|
||||
|
||||
protected PlatformTransactionManager createTransactionManager() {
|
||||
return new JtaTransactionManager(new SpringTransactionManager(graphDatabaseService));
|
||||
}
|
||||
|
||||
@@ -119,7 +119,7 @@ public class Movie {
|
||||
<title>@Graph on a node entity field</title>
|
||||
<programlisting language="java"><![CDATA[@NodeEntity
|
||||
public class Group {
|
||||
@Query(value = "start n=({self}) match (n)-[r]->(friend) where r.type = {relType} return friend",
|
||||
@Query(value = "start n=node({self}) match (n)-[r]->(friend) where r.type = {relType} return friend",
|
||||
params = {"relType", "FRIEND"})
|
||||
private Iterable<Person> friends;
|
||||
}
|
||||
|
||||
@@ -258,7 +258,7 @@ repositories {
|
||||
]]></programlisting>
|
||||
</example>
|
||||
<example>
|
||||
<title>XML configuration with GraphDatabaseService bean</title>
|
||||
<title>XML configuration with <ulink url="http://docs.neo4j.org/chunked/milestone/server-embedded.html">embedded Neo4j-Server</ulink></title>
|
||||
<programlisting language="xml"><![CDATA[<context:annotation-config/>
|
||||
|
||||
<bean id="graphDatabaseService" class="org.neo4j.kernel.EmbeddedGraphDatabase"
|
||||
@@ -272,7 +272,16 @@ repositories {
|
||||
<bean id="serverWrapper" class="org.neo4j.server.WrappingNeoServerBootstrapper"
|
||||
init-method="start" destroy-method="stop">
|
||||
<constructor-arg ref="graphDatabaseService"/>
|
||||
</bean>]]></programlisting>
|
||||
</bean>
|
||||
|
||||
// also add the static server-assets dependency to your pom.xml
|
||||
<dependency>
|
||||
<groupId>org.neo4j.app</groupId>
|
||||
<artifactId>neo4j-server</artifactId>
|
||||
<classifier>static-web</classifier>
|
||||
<version>${neo4j-version}</version>
|
||||
</dependency>
|
||||
]]></programlisting>
|
||||
</example>
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user