/******************************************************************************* * Copyright (c) 2012 Nokia Corporation * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Comarch team - initial API and implementation *******************************************************************************/ package org.ned.client.library.advanced; import java.util.Enumeration; import java.util.Vector; import org.kxml2.kdom.Document; import org.kxml2.kdom.Element; import org.kxml2.kdom.Node; import org.ned.client.Content; import org.ned.client.NedMidlet; import org.ned.client.XmlManager; import org.ned.client.utils.StringRepository; public class LibraryGeneralModel { private static final String DELTAFILE = ".delta"; private static LibraryGeneralModel mInstance; public LibraryElement mRoot; private Document mCurrentDoc; private LibraryChanges mLatestChanges; private LibraryGeneralModel() { } public static LibraryGeneralModel getInfo( Document aLibXml ) { if ( mInstance == null || mInstance.mCurrentDoc != aLibXml ) { mInstance = new LibraryGeneralModel(); mInstance.mCurrentDoc = aLibXml; Element rootElem = aLibXml.getRootElement(); if ( rootElem != null ) { mInstance.mRoot = new LibraryElement(); mInstance.parse( rootElem, mInstance.mRoot ); } mInstance.loadLatestChangesInfo(); } return mInstance; } public void getFlatList( Vector catalogsL, Vector categoriesL, Vector mediaItemsL ) { for ( int ctgNo = 0; ctgNo < mRoot.getChildern().size(); ctgNo++ ) { LibraryElement catalog = (LibraryElement)mRoot.getChildern(). elementAt( ctgNo ); catalogsL.addElement( catalog ); for ( int ctgiesNo = 0; ctgiesNo < catalog.getChildern().size(); ctgiesNo++ ) { LibraryElement category = (LibraryElement)catalog.getChildern(). elementAt( ctgiesNo ); categoriesL.addElement( category ); for ( int itemsNo = 0; itemsNo < category.getChildern().size(); itemsNo++ ) { LibraryElement item = (LibraryElement)category.getChildern(). elementAt( itemsNo ); mediaItemsL.addElement( item ); } } } } private void loadLatestChangesInfo() { mLatestChanges = new LibraryChanges( NedMidlet.getSettingsManager(). getLibraryManager().getCurrentLibrary(). getFileUri() + DELTAFILE ); mLatestChanges.load(); markNewElements(); } public void markNewElements() { Vector mediaItems = mRoot.getAllMediaItems(); resetModifiedFlag( mediaItems ); Vector updates = mLatestChanges.getNewItemIds(); Enumeration updatedEn = updates.elements(); while ( updatedEn.hasMoreElements() ) { String updatedId = (String)updatedEn.nextElement(); Enumeration mediaEn = mediaItems.elements(); while ( mediaEn.hasMoreElements() ) { LibraryElement item = (LibraryElement)mediaEn.nextElement(); if ( item.getId().equals( updatedId ) ) { item.setNew( true, true ); break; } } } } private void parse( Element aElement, LibraryElement aLibModel ) { //String id = aElement.getAttributeValue( "", "id" ); //if ( id != null && id.length() > 0 ) { Content content = XmlManager.getContentData( aElement ); aLibModel.setDetails( content ); for ( int i = 0; i < aElement.getChildCount(); i++ ) { if ( aElement.getType( i ) != Node.ELEMENT ) { continue; } Element element = aElement.getElement( i ); if ( element.getName().equals( StringRepository.TAG_CHILDS ) ) { for ( int j = 0; j < element.getChildCount(); j++ ) { if ( element.getType( j ) != Node.ELEMENT ) { continue; } Element ned_nodeElement = element.getElement( j ); LibraryElement libChildInfo = new LibraryElement( aLibModel ); parse( ned_nodeElement, libChildInfo ); if ( libChildInfo.getId() != null && libChildInfo.getId(). length() > 0 ) { aLibModel.getChildern().addElement( libChildInfo ); } } } } //} } public LibraryElement getElement( String contentId ) { return mRoot.getElement( contentId ); } public void updateNewMediaList() { LibraryChanges.persistChangesInfo( mLatestChanges.getNewItemIds(), NedMidlet. getSettingsManager(). getLibraryManager().getCurrentLibrary(). getFileUri() + DELTAFILE, true ); } public void removeFromUpdated( String id ) { if ( mLatestChanges.removeItem( id ) ) { markNewElements(); } } private void resetModifiedFlag( Vector mediaItems ) { Enumeration en = mediaItems.elements(); while ( en.hasMoreElements() ) { LibraryElement item = (LibraryElement)en.nextElement(); item.setNew( false, true ); } } }