Files in archive order

change_data_scheme
Terekhin Alexander 5 years ago
parent f3925d267a
commit 4ddb56e211
  1. 17
      src/main/java/me/bearns/fias/helpers/Catalog.java
  2. 1
      src/main/java/me/bearns/fias/helpers/UnmarshallerParameters.java
  3. 26
      src/main/java/me/bearns/fias/helpers/UpdaterImpl.java
  4. 9
      src/main/java/me/bearns/fias/xml/AddrObjAdapter.java

@ -26,8 +26,8 @@ public class Catalog {
ADDROBJ_REPOSITORY, ADDROBJ_REPOSITORY,
new QName("","Object"), new QName("","Object"),
Addrobj.class, Addrobj.class,
AddressObjects.class AddressObjects.class,
) 10)
); );
prefixList.add( prefixList.add(
new Item( new Item(
@ -35,8 +35,8 @@ public class Catalog {
HOUSE_REPOSITORY, HOUSE_REPOSITORY,
new QName("","House"), new QName("","House"),
House.class, House.class,
Houses.class Houses.class,
) 20)
); );
//init AddrObjAdapter //init AddrObjAdapter
@ -58,18 +58,20 @@ public class Catalog {
} }
public class Item implements UnmarshallerParameters { public class Item implements UnmarshallerParameters {
private Item(String prefix, JpaRepository repository, QName qName, Class cls, Class parentCls) { private Item(String prefix, JpaRepository repository, QName qName, Class cls, Class parentCls, int priority) {
this.prefix = prefix; this.prefix = prefix;
this.repository = repository; this.repository = repository;
this.qName = qName; this.qName = qName;
this.cls = cls; this.cls = cls;
this.parentCls = parentCls; this.parentCls = parentCls;
this.priority = priority;
} }
private final String prefix; private final String prefix;
private final JpaRepository repository; private final JpaRepository repository;
private final QName qName; private final QName qName;
private final Class cls; private final Class cls;
private final Class parentCls; private final Class parentCls;
private final int priority;
@Override @Override
@ -91,5 +93,10 @@ public class Catalog {
public Class getParentCls() { public Class getParentCls() {
return parentCls; return parentCls;
} }
@Override
public int getPriority() {
return priority;
}
} }
} }

@ -9,4 +9,5 @@ public interface UnmarshallerParameters {
public QName getQName(); public QName getQName();
public Class getCls(); public Class getCls();
public Class getParentCls(); public Class getParentCls();
public int getPriority();
} }

@ -18,10 +18,7 @@ import org.springframework.transaction.annotation.Transactional;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.util.Enumeration; import java.util.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future; import java.util.concurrent.Future;
import java.util.function.Predicate; import java.util.function.Predicate;
@ -107,12 +104,18 @@ public class UpdaterImpl implements UpdateHelper {
private void processArchive(File file, Predicate filter) throws CommonException { private void processArchive(File file, Predicate filter) throws CommonException {
//AddrObj - first
//House - next
//Other - last
try(final ZipFile zipFile = new ZipFile(file)){ try(final ZipFile zipFile = new ZipFile(file)){
log.debug("Process Zip file"); log.debug("Process Zip file");
final Enumeration<ZipArchiveEntry> entries = zipFile.getEntries(); final Enumeration<ZipArchiveEntry> entries = zipFile.getEntries();
SortedMap<UnmarshallerParameters, ZipArchiveEntry> map = new TreeMap<>((l,r) -> r.getPriority() - l.getPriority());
while (entries.hasMoreElements()){ while (entries.hasMoreElements()){
final ZipArchiveEntry entry = entries.nextElement(); final ZipArchiveEntry entry = entries.nextElement();
@ -123,15 +126,22 @@ public class UpdaterImpl implements UpdateHelper {
final UnmarshallerParameters config = catalog.getByPrefix(name); final UnmarshallerParameters config = catalog.getByPrefix(name);
if(config!=null) { if(config!=null) {
try (InputStream is = zipFile.getInputStream(entry)) {
log.debug("Process '{}' in zip", name); log.debug("Queue {} for processing", name);
unmarshaller.process(is, config, filter); map.put(config, entry);
}
} else { } else {
log.debug("Skip '{}'", name); log.debug("Skip '{}'", name);
} }
} }
map.forEach((config, entry) -> {
try (InputStream is = zipFile.getInputStream(entry)) {
log.debug("Process '{}' in zip", entry.getName());
unmarshaller.process(is, config, filter);
}
});
log.debug("Completed Zip file"); log.debug("Completed Zip file");
} catch (IOException e) { } catch (IOException e) {

@ -1,11 +1,13 @@
package me.bearns.fias.xml; package me.bearns.fias.xml;
import lombok.extern.slf4j.Slf4j;
import me.bearns.fias.domain.Addrobj; import me.bearns.fias.domain.Addrobj;
import me.bearns.fias.repository.AddrobjRepository; import me.bearns.fias.repository.AddrobjRepository;
import javax.xml.bind.annotation.adapters.XmlAdapter; import javax.xml.bind.annotation.adapters.XmlAdapter;
import java.util.UUID; import java.util.UUID;
@Slf4j
public class AddrObjAdapter extends XmlAdapter<String, Addrobj> { public class AddrObjAdapter extends XmlAdapter<String, Addrobj> {
private static AddrobjRepository repository; private static AddrobjRepository repository;
@ -15,11 +17,12 @@ public class AddrObjAdapter extends XmlAdapter<String, Addrobj> {
final UUID aoguid = UUID.fromString(v); final UUID aoguid = UUID.fromString(v);
final Addrobj addrobj = repository.findByAoguid(aoguid).orElseGet(Addrobj::new); final Addrobj addrobj = repository.findByAoguid(aoguid).orElseGet(Addrobj::new);
//final Addrobj addrobj = new Addrobj(); //TODO FIX IT
if(addrobj.aoid == null) { if(addrobj.aoid == null) {
addrobj.aoid = aoguid; addrobj.aoid = aoguid;
addrobj.aoguid = aoguid; addrobj.aoguid = aoguid;
//repository.save(addrobj); //repository.save(addrobj); //TODO FIX IT
log.warn("AddresObject Entity for UUID {} not found, create new.", v);
} }
return addrobj; return addrobj;
@ -38,6 +41,6 @@ public class AddrObjAdapter extends XmlAdapter<String, Addrobj> {
} }
public static void setRepository(AddrobjRepository repo){ public static void setRepository(AddrobjRepository repo){
repository = repo; if(repository == null) repository = repo;
} }
} }

Loading…
Cancel
Save