diff options
Diffstat (limited to 'src/main')
4 files changed, 269 insertions, 0 deletions
diff --git a/src/main/java/org/onap/music/spring/data/cassandra/CassandraConfig.java b/src/main/java/org/onap/music/spring/data/cassandra/CassandraConfig.java new file mode 100644 index 00000000..f35206db --- /dev/null +++ b/src/main/java/org/onap/music/spring/data/cassandra/CassandraConfig.java @@ -0,0 +1,67 @@ +/* + * ============LICENSE_START========================================== + * org.onap.music + * =================================================================== + * Copyright (c) 2018 IBM. + * =================================================================== + * 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. + * + * ============LICENSE_END============================================= + * ==================================================================== + */ + +package org.onap.music.spring.data.cassandra; + +import java.util.Arrays; +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.env.Environment; +import org.springframework.data.cassandra.config.AbstractCassandraConfiguration; +import org.springframework.data.cassandra.config.SchemaAction; +import org.springframework.data.cassandra.core.cql.keyspace.CreateKeyspaceSpecification; + +@Configuration +public class CassandraConfig extends AbstractCassandraConfiguration { + @Autowired + private Environment env; + + private static String KEYSPACE; + + @Override + public SchemaAction getSchemaAction() { + return SchemaAction.CREATE_IF_NOT_EXISTS; + } + + @Override + protected List<CreateKeyspaceSpecification> getKeyspaceCreations() { + String keyspace = env.getProperty("keyspace.name") + System.currentTimeMillis(); + KEYSPACE=keyspace; + CreateKeyspaceSpecification specification = null; + specification = CreateKeyspaceSpecification.createKeyspace(KEYSPACE); + specification.ifNotExists(true); + + return Arrays.asList(specification); + } + + @Override + public String[] getEntityBasePackages() { + return new String[] { "org.onap.music" }; + } + + @Override + protected String getKeyspaceName() { + return KEYSPACE; + } +} diff --git a/src/main/java/org/onap/music/spring/data/cassandra/MusicApplication.java b/src/main/java/org/onap/music/spring/data/cassandra/MusicApplication.java new file mode 100644 index 00000000..dabae9a5 --- /dev/null +++ b/src/main/java/org/onap/music/spring/data/cassandra/MusicApplication.java @@ -0,0 +1,55 @@ +/* + * ============LICENSE_START========================================== + * org.onap.music + * =================================================================== + * Copyright (c) 2018 IBM. + * =================================================================== + * 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. + * + * ============LICENSE_END============================================= + * ==================================================================== + */ + +package org.onap.music.spring.data.cassandra; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.builder.SpringApplicationBuilder; +import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; +import org.springframework.context.annotation.ComponentScan; +import springfox.documentation.swagger2.annotations.EnableSwagger2; + +@EnableSwagger2 +@SpringBootApplication +@ComponentScan(basePackages = {"org.onap.music" }) + +/** + * + */ +public class MusicApplication extends SpringBootServletInitializer { + + /** + * + */ + public static void main(String[] args) { + SpringApplication.run(MusicApplication.class, args); + } + + /** + * + */ + @Override + protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { + return application.sources(MusicApplication.class); + } +} diff --git a/src/main/java/org/onap/music/util/TestVotingApp.java b/src/main/java/org/onap/music/util/TestVotingApp.java new file mode 100644 index 00000000..e4a8272b --- /dev/null +++ b/src/main/java/org/onap/music/util/TestVotingApp.java @@ -0,0 +1,145 @@ +/* + * ============LICENSE_START========================================== + * org.onap.music + * =================================================================== + * Copyright (c) 2018 IBM. + * =================================================================== + * 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. + * + * ============LICENSE_END============================================= + * ==================================================================== + */ + +package org.onap.music.util; + +import java.util.HashMap; +import java.util.Map; + +import org.onap.music.datastore.PreparedQueryObject; +import org.onap.music.exceptions.MusicLockingException; +import org.onap.music.exceptions.MusicQueryException; +import org.onap.music.exceptions.MusicServiceException; +import org.onap.music.main.MusicCore; + +import com.datastax.driver.core.ResultSet; +import com.datastax.driver.core.Row; + +/** + * + */ +public class TestVotingApp { + String keyspaceName; + String tableName; + + public TestVotingApp() throws MusicServiceException { + keyspaceName = "VotingAppForMusic" + System.currentTimeMillis(); + tableName = "votecount"; + } + + public void initialize() throws MusicServiceException { + createVotingKeyspace(); + System.out.println("Created keyspaces"); + createVotingTable(); + System.out.println("Created tables"); + + createEntryForCandidate("Popeye"); + createEntryForCandidate("Judy"); + createEntryForCandidate("Flash"); + createEntryForCandidate("Mickey"); + System.out.println("Created candidates"); + } + + private void createVotingTable() throws MusicServiceException { + PreparedQueryObject queryObject = new PreparedQueryObject(); + queryObject.appendQueryString( + "CREATE TABLE " + keyspaceName + "." + tableName + " (name text PRIMARY KEY, count int);"); + + try { + MusicCore.createTable(keyspaceName, tableName, queryObject, "eventual"); + } catch (MusicServiceException e) { + throw (e); + } + } + + private void createVotingKeyspace() throws MusicServiceException { + Map<String, Object> replicationInfo = new HashMap<String, Object>(); + replicationInfo.put("'class'", "'SimpleStrategy'"); + replicationInfo.put("'replication_factor'", 1); + + PreparedQueryObject queryObject = new PreparedQueryObject(); + queryObject.appendQueryString("CREATE KEYSPACE " + keyspaceName + " WITH REPLICATION = " + + replicationInfo.toString().replaceAll("=", ":")); + + try { + MusicCore.nonKeyRelatedPut(queryObject, "eventual"); + } catch (MusicServiceException e) { + throw (e); + } + } + + /* + * private void createVotingTable() throws MusicServiceException { + * PreparedQueryObject queryObject = new PreparedQueryObject(); + * queryObject.appendQueryString( "CREATE TABLE " + keyspaceName + "." + + * tableName + " (name text PRIMARY KEY, count int);"); + * + * try { MusicCore.createTable(keyspaceName, tableName, queryObject, + * "eventual"); } catch (MusicServiceException e) { throw (e); } } + */ + + private void createEntryForCandidate(String candidateName) throws MusicServiceException { + PreparedQueryObject queryObject = new PreparedQueryObject(); + queryObject.appendQueryString("INSERT INTO " + keyspaceName + "." + tableName + " (name, count) " + "VALUES ('" + + candidateName + "', 0);"); + + MusicCore.nonKeyRelatedPut(queryObject, "eventual"); + } + + public void updateVoteCount(String candidateName, int numVotes) + throws MusicLockingException, MusicQueryException, MusicServiceException { + PreparedQueryObject queryObject = new PreparedQueryObject(); + queryObject.appendQueryString("UPDATE " + keyspaceName + "." + tableName + " SET count=" + numVotes + + " where name='" + candidateName + "';"); + MusicCore.atomicPut(keyspaceName, tableName, candidateName, queryObject, null); + } + + public HashMap<String, Integer> readAllVotes() throws MusicServiceException { + PreparedQueryObject queryObject = new PreparedQueryObject(); + queryObject.appendQueryString("SELECT * FROM " + keyspaceName + "." + tableName); + ResultSet rs = MusicCore.get(queryObject); + HashMap<String, Integer> voteCount = new HashMap<String, Integer>(); + for (Row candidate : rs.all()) { + voteCount.put(candidate.getString("name"), candidate.getInt("count")); + } + return voteCount; + } + + public static void main(String[] args) throws Exception { + TestVotingApp tva = new TestVotingApp(); + tva.initialize(); + + tva.updateVoteCount("Popeye", 5); + tva.updateVoteCount("Judy", 9); + tva.updateVoteCount("Mickey", 8); + tva.updateVoteCount("Flash", 1); + tva.updateVoteCount("Flash", 2); + + HashMap<String, Integer> voteCount = tva.readAllVotes(); + System.out.println(voteCount); + assert (voteCount.get("Popeye") == 5); + assert (voteCount.get("Judy") == 9); + assert (voteCount.get("Mickey") == 8); + assert (voteCount.get("Flash") == 2); + } + +}
\ No newline at end of file diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties new file mode 100644 index 00000000..cdeaa6e0 --- /dev/null +++ b/src/main/resources/application.properties @@ -0,0 +1,2 @@ +keyspace.name=VotingAppForMusic +server.port=1010
\ No newline at end of file |