+++ /dev/null
-/*******************************************************************************\r
- * ============LICENSE_START====================================================\r
- * * org.onap.aaf\r
- * * ===========================================================================\r
- * * Copyright © 2017 AT&T Intellectual Property. All rights reserved.\r
- * * ===========================================================================\r
- * * Licensed under the Apache License, Version 2.0 (the "License");\r
- * * you may not use this file except in compliance with the License.\r
- * * You may obtain a copy of the License at\r
- * * \r
- * * http://www.apache.org/licenses/LICENSE-2.0\r
- * * \r
- * * Unless required by applicable law or agreed to in writing, software\r
- * * distributed under the License is distributed on an "AS IS" BASIS,\r
- * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
- * * See the License for the specific language governing permissions and\r
- * * limitations under the License.\r
- * * ============LICENSE_END====================================================\r
- * *\r
- * * ECOMP is a trademark and service mark of AT&T Intellectual Property.\r
- * *\r
- ******************************************************************************/\r
-package com.att.dao;\r
-\r
-import java.io.DataInputStream;\r
-import java.io.DataOutputStream;\r
-import java.io.IOException;\r
-import java.util.ArrayList;\r
-import java.util.Collection;\r
-import java.util.HashMap;\r
-import java.util.HashSet;\r
-import java.util.List;\r
-import java.util.Map;\r
-import java.util.Map.Entry;\r
-import java.util.Set;\r
-\r
-import com.datastax.driver.core.Row;\r
-\r
-public abstract class Loader<DATA> {\r
- private int keylimit;\r
- public Loader(int keylimit) {\r
- this.keylimit = keylimit;\r
- }\r
- \r
- public int keylimit() {\r
- return keylimit;\r
- }\r
- \r
- protected abstract DATA load(DATA data, Row row);\r
- protected abstract void key(DATA data, int idx, Object[] obj);\r
- protected abstract void body(DATA data, int idx, Object[] obj);\r
-\r
- public final Object[] extract(DATA data, int size, CassDAOImpl.CRUD type) {\r
- Object[] rv=null;\r
- switch(type) {\r
- case delete:\r
- rv = new Object[keylimit()];\r
- key(data,0,rv);\r
- break;\r
- case update:\r
- rv = new Object[size];\r
- body(data,0,rv);\r
- int body = size-keylimit();\r
- if(body>0) {\r
- key(data,body,rv);\r
- }\r
- break;\r
- default:\r
- rv = new Object[size];\r
- key(data,0,rv);\r
- if(size>keylimit()) {\r
- body(data,keylimit(),rv);\r
- }\r
- break;\r
- }\r
- return rv;\r
- }\r
- \r
- public static void writeString(DataOutputStream os, String s) throws IOException {\r
- if(s==null) {\r
- os.writeInt(-1);\r
- } else {\r
- switch(s.length()) {\r
- case 0:\r
- os.writeInt(0);\r
- break;\r
- default:\r
- byte[] bytes = s.getBytes();\r
- os.writeInt(bytes.length);\r
- os.write(bytes);\r
- }\r
- }\r
- }\r
- \r
- /**\r
- * We use bytes here to set a Maximum\r
- * \r
- * @param is\r
- * @param MAX\r
- * @return\r
- * @throws IOException\r
- */\r
- public static String readString(DataInputStream is, byte[] _buff) throws IOException {\r
- int l = is.readInt();\r
- byte[] buff = _buff;\r
- switch(l) {\r
- case -1: return null;\r
- case 0: return "";\r
- default:\r
- // Cover case where there is a large string, without always allocating a large buffer.\r
- if(l>buff.length) {\r
- buff = new byte[l];\r
- }\r
- is.read(buff,0,l);\r
- return new String(buff,0,l);\r
- }\r
- }\r
-\r
- /**\r
- * Write a set with proper sizing\r
- * \r
- * Note: at the moment, this is just String. Probably can develop system where types\r
- * are supported too... but not now.\r
- * \r
- * @param os\r
- * @param set\r
- * @throws IOException\r
- */\r
- public static void writeStringSet(DataOutputStream os, Collection<String> set) throws IOException {\r
- if(set==null) {\r
- os.writeInt(-1);\r
- } else {\r
- os.writeInt(set.size());\r
- for(String s : set) {\r
- writeString(os, s);\r
- }\r
- }\r
-\r
- }\r
- \r
- public static Set<String> readStringSet(DataInputStream is, byte[] buff) throws IOException {\r
- int l = is.readInt();\r
- if(l<0) {\r
- return null;\r
- }\r
- Set<String> set = new HashSet<String>(l);\r
- for(int i=0;i<l;++i) {\r
- set.add(readString(is,buff));\r
- }\r
- return set;\r
- }\r
- \r
- public static List<String> readStringList(DataInputStream is, byte[] buff) throws IOException {\r
- int l = is.readInt();\r
- if(l<0) {\r
- return null;\r
- }\r
- List<String> list = new ArrayList<String>(l);\r
- for(int i=0;i<l;++i) {\r
- list.add(Loader.readString(is,buff));\r
- }\r
- return list;\r
- }\r
-\r
- /** \r
- * Write a map\r
- * @param os\r
- * @param map\r
- * @throws IOException\r
- */\r
- public static void writeStringMap(DataOutputStream os, Map<String,String> map) throws IOException {\r
- if(map==null) {\r
- os.writeInt(-1);\r
- } else {\r
- Set<Entry<String, String>> es = map.entrySet();\r
- os.writeInt(es.size());\r
- for(Entry<String,String> e : es) {\r
- writeString(os, e.getKey());\r
- writeString(os, e.getValue());\r
- }\r
- }\r
-\r
- }\r
-\r
- public static Map<String,String> readStringMap(DataInputStream is, byte[] buff) throws IOException {\r
- int l = is.readInt();\r
- if(l<0) {\r
- return null;\r
- }\r
- Map<String,String> map = new HashMap<String,String>(l);\r
- for(int i=0;i<l;++i) {\r
- String key = readString(is,buff);\r
- map.put(key,readString(is,buff));\r
- }\r
- return map;\r
- }\r
- public static void writeHeader(DataOutputStream os, int magic, int version) throws IOException {\r
- os.writeInt(magic);\r
- os.writeInt(version);\r
- }\r
- \r
- public static int readHeader(DataInputStream is, final int magic, final int version) throws IOException {\r
- if(is.readInt()!=magic) {\r
- throw new IOException("Corrupted Data Stream");\r
- }\r
- int v = is.readInt();\r
- if(version<0 || v>version) {\r
- throw new IOException("Unsupported Data Version: " + v);\r
- }\r
- return v;\r
- }\r
-\r
-}\r
-\r