R/oRganizeRS_2.0.R

oRganizeRS=function(
										dir_projects
										, dir_out
										, rescan = F
										, copy = T
										, cut = F
										, templateRDS=c("c:/temp/template1.rds")
										, return_templates = T
										){

	options(stringsAsFactors = F)

	if(!rescan & file.exists(templateRDS)){

		proj_templates = readRDS(templateRDS)

	}else{

		if(!dir.exists(dirname(templateRDS))) dir.create(dirname(templateRDS))

		#left to right
		dir_projects = gsub("\\\\","/",dir_projects)
		dir_out = gsub("\\\\","/",dir_out)

		#list projects
		dir_projects_in = list.dirs(dir_projects, full.names = TRUE, recursive = FALSE)

		print(c("all projects:",dir_projects_in))

		#summarize projects iteratively
		#proj_contents = lapply(dir_projects_in,.scan_1project)
		proj_contents = lapply(dir_projects_in[1:5],.scan_1project)

		#create templates for generic reorganization
		proj_templates = lapply(proj_contents,.template_1project, dir_out)

		saveRDS(proj_templates,templateRDS)

	}

	if(return_templates) return(proj_templates)

}


.scan_1project = function(dir_project){

	print(paste("Scan project:",dir_project))

	l_proj = list(
		dir_project = dir_project
		,subdirs_project = list.dirs(dir_project, full.names = TRUE, recursive = T)
		,files_all = list.files(dir_project, full.names = TRUE, recursive = T)
		)

	return(l_proj)

}

.template_1project = function(l_proj, dir_out ){

	require(plyr)

	from_project_dir  = l_proj[["dir_project"]]
	to_project_dir = file.path(dir_out, basename(l_proj[["dir_project"]]))
	to_original_dir = file.path(dir_out, basename(l_proj[["dir_project"]]),"original")
	subdirs = c("las","laz","dtm_original","dtm_fusion","tile_vectors","original","projection")
	subdirs_project = paste(to_project_dir,subdirs,sep="/")



	df_template=data.frame(
		type = ""
		,dir_old = tolower(l_proj$subdirs_project)
		,dirs_new1 = tolower(gsub(from_project_dir,to_original_dir,l_proj$subdirs_project))
		,dirs_new2 = ""
	)

	#files_check =  c("[.]las$","[.]laz$","[.]dtm$","[.]tif$","[.]img$","[.]adf$","[.]shp$","[.]doc","[.]pdf$","[.]html$")

	# las = grep("[.]las$",l_proj$files_all,value=T,ignore.case=T)
	# laz = grep("[.]laz$",l_proj$files_all,value=T,ignore.case=T)
	# dtm = grep("[.]dtm$",l_proj$files_all,value=T,ignore.case=T)
	# tif = grep("[.]tif$",l_proj$files_all,value=T,ignore.case=T)
	# img = grep("[.]img$",l_proj$files_all,value=T,ignore.case=T)
	# adf = grep("[.]adf$",l_proj$files_all,value=T,ignore.case=T)
	# shp = grep("[.]shp$",l_proj$files_all,value=T,ignore.case=T)
	# doc = grep("[.]doc",l_proj$files_all,value=T,ignore.case=T)
	# pdf = grep("[.]pdf$",l_proj$files_all,value=T,ignore.case=T)
	# html = grep("[.]html$",l_proj$files_all,value=T,ignore.case=T)

	l_types = list(
		las = grep("[.]las.{0,1}$",l_proj$files_all,value=T,ignore.case=T)
		,laz = grep("[.]laz$",l_proj$files_all,value=T,ignore.case=T)
		,dtm = grep("[.]dtm$",l_proj$files_all,value=T,ignore.case=T)
		,tif = grep("[.]tif$",l_proj$files_all,value=T,ignore.case=T)
		,img = grep("[.]img$",l_proj$files_all,value=T,ignore.case=T)
		,asc = grep("[.]asc$",l_proj$files_all,value=T,ignore.case=T)
		,adf = grep("[.]adf$",l_proj$files_all,value=T,ignore.case=T)
		#,shp = grep("[.]shp$",l_proj$files_all,value=T,ignore.case=T)
		,doc = grep("[.]doc.{0,1}$",l_proj$files_all,value=T,ignore.case=T)
		,pdf = grep("[.]pdf$",l_proj$files_all,value=T,ignore.case=T)
		,html = grep("[.]html$",l_proj$files_all,value=T,ignore.case=T)
	)

	l_types[["others"]] = l_proj$files_all[!l_proj$files_all %in% unique(unlist(l_types))]

	l_folders = lapply(l_types, function(x)unique(dirname(x)))

	df_template = read.csv(text="type,dir_old,dir_new1,dir_new2",stringsAsFactors=F,colClasses="character")

#first cut - look at individual files
	if(length(l_folders$las) > 0){
		df_template = rbind.fill(df_template
					,data.frame(type=".las",dir_old=l_types$las
											,dir_new1=gsub(from_project_dir,paste(to_project_dir,"las",sep="/"),l_types$las)
											,dir_new2=gsub(from_project_dir,to_original_dir,l_types$las)
											)		)
	}
	if(length(l_folders$laz) > 0){
		df_template = rbind.fill(df_template
														 ,data.frame(type=".laz",dir_old=l_types$laz
														 						,dir_new1=gsub(from_project_dir,paste(to_project_dir,"laz",sep="/"),l_types$laz)
														 						,dir_new2=gsub(from_project_dir,to_original_dir,l_types$laz)
														 )		)
	}
	if(length(l_folders$dtm) > 0){
		df_template = rbind.fill(df_template
														 ,data.frame(type=".dtm",dir_old=l_types$dtm
														 						,dir_new1=gsub(from_project_dir,paste(to_project_dir,"dtm_fusion",sep="/"),l_types$dtm)
														 						,dir_new2=gsub(from_project_dir,to_original_dir,l_types$dtm)
														 )		)
	}
	if(length(l_folders$tif) > 0){
		df_template = rbind.fill(df_template
														 ,data.frame(type=".tif",dir_old=l_types$tif
														 						,dir_new1=gsub(from_project_dir,paste(to_project_dir,"dtm_original",sep="/"),l_types$tif)
														 						,dir_new2=gsub(from_project_dir,to_original_dir,l_types$tif)
														 )		)
	}
	if(length(l_folders$img) > 0){
		df_template = rbind.fill(df_template
														 ,data.frame(type=".img",dir_old=l_types$img
														 						,dir_new1=gsub(from_project_dir,paste(to_project_dir,"dtm_original",sep="/"),l_types$img)
														 						,dir_new2=gsub(from_project_dir,to_original_dir,l_types$img)
														 )		)
	}
	if(length(l_folders$asc) > 0){
		df_template = rbind.fill(df_template
														 ,data.frame(type=".asc",dir_old=l_types$asc
														 						,dir_new1=gsub(from_project_dir,paste(to_project_dir,"dtm_original",sep="/"),l_types$asc)
														 						,dir_new2=gsub(from_project_dir,to_original_dir,l_types$asc)
														 )		)
	}
	if(length(l_folders$adf) > 0){
		esri_files = unique(dirname(l_types$adf))
		df_template = rbind.fill(df_template
														 ,data.frame(type=".adf",dir_old=l_types$adf
														 						,dir_new1=gsub(from_project_dir,paste(to_project_dir,"dtm_original",sep="/"),esri_files)
														 						,dir_new2=gsub(from_project_dir,to_original_dir,esri_files)
														 )		)
	}
	if(length(l_folders$doc) > 0){

		doc_dirs = unique(dirname(l_types$doc))
		df_template = rbind.fill(df_template
														 ,data.frame(type=".doc",dir_old=l_types$doc
														 						,dir_new1=gsub(from_project_dir,paste(to_project_dir,"original_metafiles",sep="/"),l_types$doc)
														 						,dir_new2=gsub(from_project_dir,to_original_dir,l_types$doc)
														 )		)
	}
	if(length(l_folders$pdf) > 0){

		pdf_dirs = unique(dirname(l_types$pdf))
		df_template = rbind.fill(df_template
														 ,data.frame(type=".pdf",dir_old=l_types$pdf
														 						,dir_new1=gsub(from_project_dir,paste(to_project_dir,"original_metafiles",sep="/"),l_types$pdf)
														 						,dir_new2=gsub(from_project_dir,to_original_dir,l_types$pdf)
														 )		)
	}
	if(length(l_folders$html) > 0){

		html_files = unique(dirname(l_types$html))
		df_template = rbind.fill(df_template
														 ,data.frame(type=".html",dir_old=l_types$html
														 						,dir_new1=gsub(from_project_dir,paste(to_project_dir,"original_metafiles",sep="/"),l_types$html)
														 						,dir_new2=gsub(from_project_dir,to_original_dir,l_types$html)
														 )		)
	}
	if(length(l_folders$other) > 0){

		other_dirs = unique(dirname(l_types$others))
		df_template = rbind.fill(df_template
														 ,data.frame(type="other",dir_old=l_types$others
														 						,dir_new1=gsub(from_project_dir,to_original_dir,l_types$others)
														 						,dir_new2=""#gsub(from_project_dir,to_original_dir,l_types$others)
														 )		)
	}

	#second cut - organize by folders, las and laz may be in same folder ...
	spl_template = split(df_template, df_template$type)
	df_dirs_temp = rbind.fill(lapply(spl_template,.fn_temp_dirs))

	return(list(df_template,df_dirs_temp))

}

.fn_temp_dirs=function(df_tempi){

	#get unique set of directories
	dir_old_in = dirname(df_tempi$dir_old)
	dup_dir = duplicated(dir_old_in)
	df_tempi_unq =  df_tempi[!dup_dir,]

	#select first instance into template, set 2nd,3rd... instances into alternate "dir_new2" folder"
	if(length(df_tempi_unq) > 0){
		#if(sum(grepl(c(".las",".laz",".dtm",".tif",".adf",".img",".asc") , df_tempi_unq)) > 0){ #if grepl not really necessary
			df_tempi_unq_a = df_tempi_unq
			df_tempi_unq[-1,"dir_new1"] = df_tempi_unq_a[-1,"dir_new2"]
			df_tempi_unq[-1,"dir_new1"] = df_tempi_unq_a[-1,"dir_new1"]
		#}
	}

	#return directories only
	df_tempi_unq[,-1] = apply(df_tempi_unq[,-1],2,dirname)
	df_tempi_unq

}

.template_1project_old = function(l_proj, dir_out ){


	if(length(l_proj$dirs_types$dirs_laz) >=1  | length(l_proj$dirs_types$dirs_laz) >=1){

		from_project_dir  = l_proj[["dir_project"]]
		to_project_dir = file.path(dir_out, basename(l_proj[["dir_project"]]))
		to_original_dir = file.path(dir_out, basename(l_proj[["dir_project"]]),"original")
		subdirs = c("las","laz","dtm_original","dtm_fusion","tile_vectors","original","projection")
		subdirs_project = paste(to_project_dir,subdirs,sep="/")

		l_template = list(

			dir_project = to_project_dir
			,subdirs_project = subdirs_project

		)

		l_template[["dirs_types"]][["dirs_las"]] = rep(paste(to_project_dir,"las",sep="/"),length(l_proj[["dirs_types"]][["dirs_las"]]))
		l_template[["dirs_types"]][["dirs_laz"]] = rep(paste(to_project_dir,"laz",sep="/"),length(l_proj[["dirs_types"]][["dirs_laz"]]))
		l_template[["dirs_types"]][["dirs_dtm_fsn"]] = rep(paste(to_project_dir,"dtm_fusion",sep="/"),length(l_proj[["dirs_types"]][["dirs_dtm"]]))
		l_template[["dirs_types"]][["dirs_dtm_org"]] = paste(to_project_dir,"dtm_original",sep="/")
		l_template[["dirs_types"]][["dirs_tif"]] = gsub(from_project_dir,to_original_dir,l_proj[["dirs_types"]][["dirs_tif"]])
		l_template[["dirs_types"]][["dirs_img"]] = gsub(from_project_dir,to_original_dir,l_proj[["dirs_types"]][["dirs_img"]])
		l_template[["dirs_types"]][["dirs_adf"]] = gsub(from_project_dir,to_original_dir,l_proj[["dirs_types"]][["dirs_adf"]])
		l_template[["dirs_types"]][["dirs_shp"]] = gsub(from_project_dir,to_original_dir,l_proj[["dirs_types"]][["dirs_shp"]])
		l_template[["dirs_types"]][["dirs_doc"]] = gsub(from_project_dir,to_original_dir,l_proj[["dirs_types"]][["dirs_doc"]])
		l_template[["dirs_types"]][["dirs_pdf"]] = gsub(from_project_dir,to_original_dir,l_proj[["dirs_types"]][["dirs_pdf"]])


	}else{

		warning(paste("Skipped",l_proj$dir_project,"no las or laz files found"))

		l_template = list(dir_project = l_proj$dir_project, note = "no las or laz files found" )

	}

	if(return_templates) return( list(original=l_proj,template=l_template ))


}

.seekFiles = function(pattern, dir){

	list.files(dir, pattern=pattern, full.names=T,recursive = T,ignore.case = T)

}


#external hdd
if(F){
	templates = oRganizeRS("d:\\temp\\test_dir\\","d:\\temp\\test_dir1\\", rescan = T)
}
jstrunk001/oRganizeRS documentation built on May 9, 2019, 7:34 p.m.